【发布时间】:2011-01-17 16:34:56
【问题描述】:
所以我尝试动态加载脚本并找出加载该脚本的 URL 路径。因此,如果脚本是静态加载的(How to get the file-path of the currently executing javascript code),那么有人给了我一个非常棒的解决方案来解决这个问题。但我需要一个动态加载的解决方案。例如:
$(function()
{ $.getScript("brilliant.js", function(data, textStatus)
{ // do nothing
});
});
“brilliant.js”在哪里:
var scripts = document.getElementsByTagName("script");
var src = scripts[scripts.length-1].src;
alert("THIS IS: "+src);
理想情况下,这应该打印出“brilliant.js”或“〈hostname+basepath〉/brilliant.js”
目前,brilliant.js 适用于静态包含的脚本,但不适用于动态包含的脚本(如 $.getScript)。谁有想法? dom 中是否有某个地方存储了所有已加载的脚本?
编辑:Andras 提供了一个非常好的解决方案,尽管它可能只适用于 jQuery。因为这可能是最受欢迎的库,而且肯定是我将要使用的库。它也可以扩展到其他库。这是我的简化版:
var scriptUri;
curScriptUrl(function(x)
{ scriptUri = x;
alert(scriptUri);
});
function curScriptUrl(callback)
{ var scripts = document.getElementsByTagName("script");
var scriptURI = scripts[scripts.length-1].src;
if(scriptURI != "") // static include
{ callback(scriptURI);
}else if($ != undefined) // jQuery ajax
{ $(document).ajaxSuccess(function(e, xhr, s)
{ callback(s.url);
});
}
}
【问题讨论】:
-
我喜欢 chamiltongt(下)所说的,代码中的 ajax,然后 eval() 它。为了使其普遍可访问,为什么不建立一个微型站点来提供您的 .js 代码。它将是集中式的,您可以立即为每个用户更新您的代码。
标签: javascript jquery ajax include load