Javascript 如何获取.js文件本身的uri
JavaScript中是否有一种方法,可以通过该方法找到执行脚本的路径/uri 例如:Javascript 如何获取.js文件本身的uri,javascript,Javascript,JavaScript中是否有一种方法,可以通过该方法找到执行脚本的路径/uri 例如: index.html包含一个JavaScript文件stuff.js,由于stuff.js文件依赖于/commons.js,因此它也希望将其包含在页面中。问题是stuff.js只从自身知道/commons.js的相对路径,不知道完整的url/路径 index.html包括stuff.js文件作为和stuff.js文件要读取键的值。怎么做 更新:是否有标准的方法来执行此操作?甚至在征兵状态下?(我可以从答案中看
index.html
包含一个JavaScript文件stuff.js
,由于stuff.js
文件依赖于/commons.js
,因此它也希望将其包含在页面中。问题是stuff.js
只从自身知道/commons.js
的相对路径,不知道完整的url/路径index.html
包括stuff.js
文件作为
和stuff.js
文件要读取键的值。怎么做
更新:是否有标准的方法来执行此操作?甚至在征兵状态下?(我可以从答案中看出,答案是“否”。感谢所有人的回答)。这将为您提供当前脚本的完整路径(如果根据请求加载,则可能无法工作等)
如果您的脚本知道它被称为“stuff.js”,那么它可以查看DOM中的所有脚本标记
var scripts = document.getElementsByTagName('script');
然后它可以查看其名称的“src”属性。然而,这是一种黑客行为,在我看来,这似乎是您真正应该在服务器端解决的问题。()解决了类似的问题。这是相关代码
var js = /scriptaculous\.js(\?.*)?$/;
$$('script[src]').findAll(function(s) {
return s.src.match(js);
}).each(function(s) {
var path = s.src.replace(js, ''),
includes = s.src.match(/\?.*load=([a-z,]*)/);
(includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
function(include) { Scriptaculous.require(path+include+'.js') });
});
(其中有些部分类似于。每个部分都需要原型)如果您只想找到动态添加脚本的URI,那么这(有时)可能会起作用,但我怀疑这是他想要的。在动态添加脚本元素的情况下,您最好不必为此费心,而是先存储脚本URI,然后再创建脚本元素。什么?这与动态添加的脚本无关。这与脚本在解析时如何顺序添加到DOM有关。这确实管用。说得好。这在所有重要的浏览器中都可靠吗?我最初的评论有点倒退,因为这肯定不适用于动态添加的脚本,除非您总是在任何其他脚本之后添加它们。是的,这是可靠的,因为规范说明了如何解析和添加脚本。这只适用于通过脚本标记加载脚本的情况(之后标记保留在DOM中)。当然,大多数脚本都是。但是动态加载的代码将没有这样的标记。
var js = /scriptaculous\.js(\?.*)?$/;
$$('script[src]').findAll(function(s) {
return s.src.match(js);
}).each(function(s) {
var path = s.src.replace(js, ''),
includes = s.src.match(/\?.*load=([a-z,]*)/);
(includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
function(include) { Scriptaculous.require(path+include+'.js') });
});