19

大家好,我一直在尝试组合一个通用函数,用于检索网页上正在执行的 JavaScript 文件的绝对 URL:

http://gist.github.com/433486

基本上你可以这样称呼:

getScriptName(function(url) {
    console.log(url);
    // http://www.example.com/myExternalJsFile.js
});

在页面上的外部 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;

我希望它在动态创建的脚本标签(可能没有放在页面的最后)的情况下工作,也就是延迟加载。

4

2 回答 2

1

这在很大程度上取决于您可以访问的内容。如果看起来,您试图完全在 JS 代码中执行此操作,我不相信您能够做到这一点,原因如上所示。你可能会得到 90% 的结果,但不是确定的。

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

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

于 2011-07-04T09:38:06.570 回答
1

抱歉,我怀疑您可能会为此感到困惑。早于版本 8 的 IE 通常会从以下形式的 javascript 错误中提供错误消息:

line: 342
char: 3
error: expected identifier, string or number
code: 0
url: http://example.com/path/to/resource

其中 url 是 window.location.href,而不是包含问题的外部 Javascript 资源的 URL。我建议 IE 提供无用的 URL 值,因为脚本 URL 在此时对 IE 不可用,并且它也不适用于您可能编写的任何 Javascript 来尝试显示它。

我希望能够链接到 IE8 发行说明,其中说此错误/功能已得到修复,因此我将其创建为社区 wiki。我的 MSDN foo 很弱!

于 2011-07-04T16:19:32.517 回答