1

是否可以在初始 DOM 解析期间或之前修改 DOM?还是我必须等到 DOM 被解析和构建后才能与之交互?更具体地说,是否有可能阻止 DOM 中的脚本元素使用用户脚本/内容脚本或 chrome 或 firefox 中的类似脚本运行?

在解析 DOM 之前尝试在 DOMNodeInserted 上使用 eventListeners,但这些仅在 DOM 构建后才会触发。

4

4 回答 4

1

这是两个不同的问题:

1. 是否可以在初始 DOM 解析期间或之前修改 DOM?

是的。一旦浏览器构建了根元素,您就可以开始查询和修改 DOM。请注意,当您的脚本运行时,某些页面可能仍未解析,甚至可能仍在网络上传输。您的脚本通常可以访问在包含/调用您的脚本的脚本标记之前在源中声明的任何元素。这包括包含您的脚本标签的父元素。

2. 是否可以使用用户脚本/内容脚本或 chrome 或 firefox 中的类似内容来阻止 DOM 中的脚本元素运行?

不会。所有脚本都会执行,一个脚本不能阻止另一个脚本的初始执行。但是,您也许可以返回并删除事件处理程序,或者尝试抵消脚本的影响。尽管这种情况看起来有点阴暗和/或违背了正常的 JavaScript 用法。

于 2010-04-04T20:03:04.020 回答
0

在为 Chrome 开发广告拦截器时,我实际上已经对此进行了很多研究。基本上,您不能只使用 Javascript 来停止 Javascript,尤其是因为它会与相关脚本元素同时运行。因此,即使它会起作用,它也会导致竞争条件

于 2010-04-04T17:28:26.963 回答
0

您可以在文档解析期间修改元素,但在此元素添加到 dom 之后。例如

<div id="example"></div>
<script>
    document.getElementById('example').innerHTML = 'hello';
</script>
<div>something else</div>
于 2010-04-04T17:29:52.563 回答
0

是否可以在初始 DOM 解析期间或之前修改 DOM?

对的,这是可能的。

首先完全防止文档被完全解析,然后在一边,获取相同的文档,对此文档进行任何处理,然后将生成的文档注入页面中。

这是我目前的做法https://stackoverflow.com/a/36097573/6085033

于 2016-03-19T05:10:02.820 回答