浏览器是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'
And*_*y E 26
document.currentScript仅返回当前正在处理的脚本.在回调和事件,剧本已经完成正在处理中,document.currentScript会null.这是故意的,因为保持引用处于活动状态会阻止脚本在从DOM中删除并删除所有其他引用时进行垃圾回收.
如果您需要在任何回调之外保留对脚本的引用,您可以:
var thisScript = document.currentScript;
setInterval(() => console.log(thisScript.src), 2000);
Run Code Online (Sandbox Code Playgroud)
document.currentScript如果脚本像这样作为模块加载,也将为空。
<script type="module" src="foo/bar.js"></script>
Run Code Online (Sandbox Code Playgroud)
对于模块,文档说import.meta.url应该使用。
您可以document.currentScript在回调之外保留参考
var currentScript = document.currentScript;
setInterval(function(){
var fullUrl = currentScript.src;
console.log(fullUrl)
},2000);
Run Code Online (Sandbox Code Playgroud)