获取执行JavaScript文件的URL(主要是IE6-7问题)

Too*_*ate 19 html javascript internet-explorer cross-browser absolute

嘿所有,我一直在尝试将一个通用函数放在一起,检索网页上正在执行的JavaScript文件的绝对URL:

http://gist.github.com/433486

基本上你可以这样打电话:

getScriptName(function(url) {
    console.log(url);
    // http://www.example.com/myExternalJsFile.js
});
Run Code Online (Sandbox Code Playgroud)

在页面上的外部JavaScript文件中,然后可以对其执行某些操作(例如,查找<script>加载它的标记).

它几乎在我测试过的所有浏览器中都很棒(至少Firefox,Chrome,Safari,Opera v10和IE 8).

但是,它似乎在IE 6和7中失败.回调函数被执行,但检索到的名称是主HTML页面的URL,而不是JavaScript文件.继续该示例,getScriptName使用参数调用回调:http://www.example.com/index.html

所以我真正想问的是,是否有其他方法可以获取当前JavaScript文件的URL(可能是IE 6和7特定的hackery)?提前致谢!

编辑:此外,这不适用于所有情况,所以请不要推荐它:

var scripts = document.getElementsByTagName("script");
return scripts[scripts.length-1].src;
Run Code Online (Sandbox Code Playgroud)

我希望它适用于动态创建的脚本标记(可能不会放在页面的最后),也就是延迟加载.

Sch*_*Cat 1

这在很大程度上取决于您可以访问的内容。如果您试图完全在 JS 代码中完成此操作,如您所见,出于上面所示的某些原因,我不相信您能够做到这一点。也许你可以达到 90%,但不能确定。

如果您在 dotnet 环境中工作(这是我所知道的唯一环境),我建议使用一个模块来拦截所有 JS 请求并向其中添加请求位置或类似性质的内容。

我认为你需要从服务器端解决这个问题,而不是客户端。我认为您不会从客户端得到明确的答案。我认为您也将很难从服务器端获得答案,但您可能会更成功。