是否有一种简单可靠的方法来确定当前正在执行的JavaScript文件的URL(在网页内)?
我唯一想到的是扫描DOM src以查找所有脚本属性以查找当前文件的引用方式,然后通过应用它来计算绝对URL document.location.任何人都有其他想法,是否有一些我完全忽略的超级简单方法?
更新:通过DOM访问的脚本元素已经具有src包含完整URL 的属性.我不知道它是多么普遍/标准,但是你可以使用getAttribute("src")哪个将返回[X] HTML中的任何原始属性值.
浏览器是Chrome.应该支持document.currentScript
的index.html
<link href="css/main.css" rel="stylesheet" />
<script src="1.js"></script>
<style>
Run Code Online (Sandbox Code Playgroud)
1.js
setInterval(function(){
var fullUrl = document.currentScript.src;
console.log(fullUrl)
},2000)
Run Code Online (Sandbox Code Playgroud)
错误: 1.js:4未捕获的TypeError:无法读取null的属性'src'
所以我正在尝试动态加载脚本并找出加载该脚本的URL路径.如果脚本是静态加载的(如何获取当前正在执行的javascript代码的文件路径),有些人给了我一个非常棒的解决方案来解决这个问题.但我需要一个动态加载的解决方案.例如:
$(function()
{ $.getScript("brilliant.js", function(data, textStatus)
{ // do nothing
});
});
Run Code Online (Sandbox Code Playgroud)
"brilliant.js"在哪里:
var scripts = document.getElementsByTagName("script");
var src = scripts[scripts.length-1].src;
alert("THIS IS: "+src);
Run Code Online (Sandbox Code Playgroud)
理想情况下,这应该打印出"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);
});
}
}
Run Code Online (Sandbox Code Playgroud)