Javascript document.currentScript为空
浏览器为Chrome,Javascript document.currentScript为空,javascript,Javascript,浏览器为Chrome,文档。应支持currentScript,但 index.html <link href="css/main.css" rel="stylesheet" /> <script src="1.js"></script> <style> 你没有读过,上面写着: 需要注意的是,如果脚本中的代码被调用为回调或事件处理程序,那么它将不会引用元素;它将仅在元素最初被处理时引用该元素 document.currentScript仅限。在回调
文档。应支持currentScript
,但
index.html
<link href="css/main.css" rel="stylesheet" />
<script src="1.js"></script>
<style>
你没有读过,上面写着:
需要注意的是,如果脚本中的代码被调用为回调或事件处理程序,那么它将不会引用
元素;它将仅在元素最初被处理时引用该元素
document.currentScript
仅限。在回调和事件期间,脚本已完成处理,并且document.currentScript
将null
。这是有意为之的,因为如果从DOM中删除了该脚本,并且删除了所有其他引用,那么保持该引用的活动状态将防止该脚本被垃圾收集
如果需要在任何回调之外保留对脚本的引用,可以:
var thisScript = document.currentScript;
setInterval(() => console.log(thisScript.src), 2000);
您可以将
document.currentScript
的引用保留在回调之外
var currentScript = document.currentScript;
setInterval(function(){
var fullUrl = currentScript.src;
console.log(fullUrl)
},2000);
document.currentScript
如果像这样将脚本作为模块加载,它也将为空
<script type="module" src="foo/bar.js"></script>
对于模块,文档说应该使用
import.meta.url
。@Brian:再看一次。只需确保在闭包中隔离thisScript
。如果您要的是src
值,那么为什么不保存该值,而不是从DOM中保存整个脚本对象<代码>var thisScriptSrc=document.currentScript&&document.currentScript.src代码>
var currentScript = document.currentScript;
setInterval(function(){
var fullUrl = currentScript.src;
console.log(fullUrl)
},2000);
<script type="module" src="foo/bar.js"></script>