如何得到一个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 生命周期点期间执行。它仅在脚本元素的初始执行时具有值。据我所知,脚本元素只在文档生命周期的两个不同点执行:

  1. 在加载时,对于文档原始 HTML 中的脚本元素
  2. 当脚本元素直接插入文档时

如果脚本中的某个函数在其他时间点被调用,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];

以上代码不可信任。它延迟异步条件。