如何确定调用脚本元素?

How to determine calling script element?

我手头的任务是创建代理项 document.write() 以使此功能在 XHTML 下可用。通常这个函数不能用来避免 XHTML 被写入文档的无意义数据破坏,但在某些情况下,有一个 JavaScript 来模拟这个函数是可行的,也就是说,获取一个字符串并解析它创建一个可以插入到现有文档中的 DOM 树。但是,要找到插入这个新创建的树的位置,我必须在文档中找到调用脚本节点的位置。

将函数附加到文档节点不是问题,因为在 XHTML 下它是可扩展的,而且解析输入字符串也不是什么大问题。如果遇到错误,它们将记录到控制台,并抛出异常。

考虑从外部文件加载的精简版 document.write:

document.write = function (p_arg)
  {
// X

// Do something with p_arg here
  };

由于应该从文档正文中的任何位置调用此函数,因此我必须在点 X 处插入什么才能确定对此函数的调用来自何处(即调用调用的脚本节点) ?

需要考虑以下条件:

我希望尽可能接近原始 document.write,除非适用 XHTML 固有的限制,以允许使用依赖于该功能的预先存在的代码。

现在,我如何找到插入由该函数生成的 DOM 树的位置(如果没有后继者,那将是在 JavaScript 之后的节点之前或末尾)存在)?

以下是我对你的看法。

它基本上获取 运行 的 currentScript,找到它的父元素并附加元素。我还没有完成解析部分,所以在这种情况下只是假装 <b>there</b> 已经被解析并且您已经完成了所有的 createElement 位..

<script>
function docWrite(s) {
  //lets pretend we have parsed the s..
  //and it's <b>there</b>
  let b = document.createElement('b');
  b.textContent = 'there';
  let scr = document.currentScript;
  scr.parentNode.insertBefore(b, scr);  
}
</script>


<h1>Hello</h1>
<script>docWrite('<b>there</b>');</script>
<span>After</span>