如何得到一个currentScript的属性?
How get a currentScript attributes?
如何获取 currentScript 属性?
*我正在使用此代码获取 currentScript 但这不起作用,因为脚本是异步的。
var target = document.currentScript || (function() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
})();
抱歉我正在学习英语的语言错误。
此致,
试听 beforescriptexecute(未测试):
document.addEventListener("beforescriptexecute", function(){
var target = document.currentScript || (function() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
})();
});
使用 document.currentScript.async
怎么样?
来源:https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript
当 document.currentScript 实际具有值时,您的代码不能在 DOM 生命周期点期间执行。它仅在脚本元素的初始执行时具有值。据我所知,脚本元素只在文档生命周期的两个不同点执行:
- 在加载时,对于文档原始 HTML 中的脚本元素
- 当脚本元素直接插入文档时
如果脚本中的某个函数在其他时间点被调用,document.currentScript 要么为空,要么可能不是您期望的元素(例如,如果您插入一个脚本元素调用另一个脚本元素中的函数)。
我发现将 jQuery $(...) 与 html 字符串一起使用通常会为 document.currentScript 提供一个空值。据我所知,如果在插入 HTML 块时需要 document.currentScript 为非空,则不能使用 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 作为字符串调用解释器。
document.currentScript 与 chrome 和 FF 完美配合,但是,IE 不支持它。很痛苦。
scripts[scripts.length - 1];
以上代码不可信任。它延迟异步条件。
如何获取 currentScript 属性?
*我正在使用此代码获取 currentScript 但这不起作用,因为脚本是异步的。
var target = document.currentScript || (function() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
})();
抱歉我正在学习英语的语言错误。
此致,
试听 beforescriptexecute(未测试):
document.addEventListener("beforescriptexecute", function(){
var target = document.currentScript || (function() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
})();
});
使用 document.currentScript.async
怎么样?
来源:https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript
当 document.currentScript 实际具有值时,您的代码不能在 DOM 生命周期点期间执行。它仅在脚本元素的初始执行时具有值。据我所知,脚本元素只在文档生命周期的两个不同点执行:
- 在加载时,对于文档原始 HTML 中的脚本元素
- 当脚本元素直接插入文档时
如果脚本中的某个函数在其他时间点被调用,document.currentScript 要么为空,要么可能不是您期望的元素(例如,如果您插入一个脚本元素调用另一个脚本元素中的函数)。
我发现将 jQuery $(...) 与 html 字符串一起使用通常会为 document.currentScript 提供一个空值。据我所知,如果在插入 HTML 块时需要 document.currentScript 为非空,则不能使用 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 作为字符串调用解释器。
document.currentScript 与 chrome 和 FF 完美配合,但是,IE 不支持它。很痛苦。
scripts[scripts.length - 1];
以上代码不可信任。它延迟异步条件。