如何获取currentScript属性?

时间:2015-03-27 14:19:12

标签: javascript html dom

我如何获得currentScript属性?

*我正在使用此代码获取当前脚本,但这不起作用,因为脚本是异步的。

var target = document.currentScript || (function() {
  var scripts = document.getElementsByTagName('script');
  return scripts[scripts.length - 1];
})();

对不起我正在学习英语的语言。

此致

4 个答案:

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

  1. 在加载时,对于文档的原始HTML中的脚本元素
  2. 当脚本元素直接插入文档时
  3. 如果脚本中的某个函数在某个其他位置被调用,则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];

上述代码不可信。它推迟了异步条件。