我如何获得currentScript属性?
*我正在使用此代码获取当前脚本,但这不起作用,因为脚本是异步的。
var target = document.currentScript || (function() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
})();
对不起我正在学习英语的语言。
此致
答案 0 :(得分:1)
尝试收听beforescriptexecute(未经测试):
document.addEventListener("beforescriptexecute", function(){
var target = document.currentScript || (function() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
})();
});
答案 1 :(得分:1)
如何使用document.currentScript.async
?
来源:https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript
答案 2 :(得分:1)
当document.currentScript实际具有值时,您的代码必须在DOM生命周期点期间不执行。它只对初始执行脚本元素有一个值。据我所知,脚本元素只在文档生命周期的两个不同点执行:
如果脚本中的某个函数在某个其他位置被调用,则document.currentScript将为null或者它可能不会成为您期望它的元素(就像您插入一个调用a的脚本元素一样)在另一个脚本元素中运行。)
我发现使用带有html字符串的jQuery $(...)通常会为document.currentScript提供null。据我所知,如果你在插入一大块HTML时需要document.currentScript为非null,你就不能使用jQuery的html()方法而你可能需要自己写。
当然,如果您只是插入一大块包含脚本元素的HTML,那么他们甚至不会执行,因为他们不是直接插入。因此,你的setHtml()函数必须重新插入每个脚本元素,你最终会在某些方面得到这些代码(例如CoffeeScript中的代码):
for script in $(el).find('script')
if !script.type || script.type == 'text/javascript'
newScript = document.createElement 'script'
newScript.type = 'text/javascript'
if script.src then newScript.src = script.src
newScript.textContent = script.textContent
script.parentNode.insertBefore newScript, script
script.parentNode.removeChild script
如果要处理其他语言的脚本元素并且仍想利用document.currentScript,则需要将它们编译为JavaScript并将newScript.textContent设置为已编译的代码,否则如果可以只使用解释器,您需要将newScript.textContent设置为您构造的JavaScript表达式,该表达式使用script.textContent作为字符串调用解释器。
答案 3 :(得分:1)
document.currentScript完全适用于chrome和FF,但IE不支持它。这很痛苦。
scripts[scripts.length - 1];
上述代码不可信。它推迟了异步条件。