JavaScript:获取当前正在执行的<script>节点?

Mar*_*iry 26 javascript dom

我需要知道是否有可能获得当前的执行节点?

例:

..html
<script id="x">
  console.log(document.currentNode.id); // << this must return "x"
</script>
..html
Run Code Online (Sandbox Code Playgroud)

谢谢!

And*_*rew 22

我不知道100%肯定,但返回的脚本标签集合document.getElementsByTagName('script')不应包含当前正在执行的脚本标签<script>.换句话说,我认为这应该有效:

var arrScripts = document.getElementsByTagName('script');
var strScriptTagId = arrScripts[arrScripts.length - 1].id;
Run Code Online (Sandbox Code Playgroud)

这仅适用于在页面加载时执行的脚本.如果这在延迟脚本中执行或作为页面加载事件的一部分执行,则它可能始终报告<script>完全呈现页面中的最后一个.请注意,id标记不是有效属性<script>,因此您的网页可能无法验证.如果您有任何编写脚本标记的外部脚本(例如,第三方广告),我认为代码将是不可预测的.几年前我玩过这个想法,结果并不令人满意.

  • @unscriptable,是的.我以为我在答案中已经清楚地解释了这一点.没有? (6认同)
  • 这不适用于异步脚本. (4认同)

min*_*des 18

Gecko(Firefox)支持文档对象上指向当前脚本节点的非标准属性.在进行上述回答之前,您可能需要检查一下.

https://developer.mozilla.org/en-US/docs/DOM/document.currentScript

<script id="x">
  console.log(document.currentScript.id); // << this must return "x"
</script>
Run Code Online (Sandbox Code Playgroud)

  • `document.currentScript`实际上是HTML5的一部分:http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#dom-document-currentscript (8认同)
  • Chrome也支持它(从第29节开始) (2认同)