为Javascript文件相对URL(Relative urls for Javascript fi

2019-07-29 18:07发布

我有需要发送的查询回服务器的JavaScript文件的一些代码。 现在的问题是,我该如何找到我在脚本中的URL,这样我就可以构建AJAX适当的请求URL。

也就是说,同样的剧本被包含在//help/whatever ,等等,而它总是需要从请求/data.json 。 此外,在同一部位在不同的服务器,在运行/ -folder可能有不同的放置。 我有办法来解决相对URL,其中包括我的JavaScript(EZ-发布模板),而不是javascript文件本身。

是否有小脚本,将针对此做出所有的浏览器?

Answer 1:

为此,我喜欢把<link>在页面的元素<head> ,包含的网址使用请求。 他们可以通过你的服务器端语言生成,使他们始终指向正确的观点:

<link id="link-action-1" href="${reverse_url ('action_1')}"/>

<link id="link-action-1" href="/my/web/root/action-1/"/>

并且可以通过使用Javascript检索用:

document.getElementById ('link-action-1').href;


Answer 2:

document.location.href会给你当前的URL,然后你就可以用JavaScript操作的字符串函数。



Answer 3:

有没有办法使客户能够确定Web应用程序根没有服务器被告知,因为它没有服务器的配置的知识。 你可以尝试一种选择是使用基本元素head元素中,让服务器生成动态地而不是硬编码(所以它显示了每个服务器相关的URL):

<base href="http://path/to/webapp/root/" />

然后,所有的URL将被视为相对于此。 因此,你只会让你的要求/data.json。 然而,你需要确保应用程序中所有其他环节牢记这一点。



Answer 4:

如果脚本知道它自己的文件名,你可以使用文档。 的getElementsByTagName()。 遍历列表,直到找到适合你的脚本,并提取全部(或相对)的URL的方式。

下面是一个例子:

function getScriptUrl ( name ) {
    var scripts = document.getElementsByTagName('script');
    var re = RegExp("(\/|^)" + name + "$");
    var src;
    for( var i = 0; i < scripts.length; i++){
        src = scripts[i].getAttribute('src');
        if( src.match(re) )
            return src;
    }
    return null;
}

console.log( 'found ' + getScriptUrl('demo.js') );

考虑到这种做法是受到碰撞名。



Answer 5:

我包括我的图书馆主入口点(main.php)下面的代码:

/**
 * Build current url, depending on protocal (http/https),
 * port, server name and path suffix
 */
$site_root = 'http';
if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") 
    $site_root .= "s";
$site_root .= "://" . $_SERVER["SERVER_NAME"];
if ($_SERVER["SERVER_PORT"] != "80")
    $site_root .= ":" . $_SERVER["SERVER_PORT"];
$site_root .= $g_config["paths"]["site_suffix"];

$g_config["paths"]["site_root"] = $site_root;

$ g_config是包含配置选项的全局数组。 所以site_suffix可能类似于:一个服务器上开发中的“/ sites_working / thesite /的public_html”,只是“/”与虚拟主机(域名)。

这种方法也不错,因为如果在你的开发机器的IP地址有人类型,它将使用相同的IP地址建立路径的JavaScript文件夹,而不是像“本地主机”,如果你使用“localhost”它将使用“localhost”来构建URL。

而且因为它也检测SSL,你不会担心天气如果你曾经添加SSL支持,您的服务器你的资源将被发送通过HTTP或HTTPS。

然后,在你的模板,或者使用

<link id="site_root" href="<?php echo $g_config["paths"]["site_root"] ?>"/>

要么

<script type = "text/javascript">
var SiteRoot = "<?php echo $g_config["paths"]["site_root"]; ?>";
</script>

我想后者会更快。



文章来源: Relative urls for Javascript files