3

我正在开发一个 chrome 扩展,它需要阻止 html 页面的加载,对页面中的 javascript 进行一些验证,在我的内容脚本中,并继续(或不)加载页面。

在我的带有“run_at”:“document_start”的清单中,内容脚本得到一个空的 html 并且无法进行验证。在 document_end 使用 run_at,它已经执行了页面中的 js,然后我的扩展程序对其进行了验证......

有没有办法像我的内容脚本中的 DOMContentBeforeLoad 一样设置?我真的没办法了。。

谢谢

4

2 回答 2

3

看看 TopLevel.js 是如何工作的:https ://github.com/kristolous/TopLevel (有趣的来源在https://github.com/kristolous/TopLevel/blob/master/toplevel.js

这是您在页面中明确包含的库。当它到达页面并立即运行它时 document.write()'sa <plaintext> element with style='display: none',它立即停止浏览器解析页面的其余部分,并隐藏纯文本结果(纯文本是一个已弃用的元素,它停止解释页面内容,并将所有 HTML 视为原始的未解析纯文本:https ://developer.mozilla.org/en-US/docs/Web/HTML/Element/plaintext )。

然后 Toplevel 解析 <plaintext> 元素本身的文本内容(并进行一些模板化,这是库的重点),并且 document.write() 将生成的新内容手动写入页面。

你应该能够做类似的事情:注入一个 <plaintext> 元素来阻止浏览器解析页面,自己解析它(或用它做任何你想做的事情),然后可能写出你喜欢的任何东西(包括原始内容)到页面一旦你高兴。

于 2015-08-20T09:50:33.207 回答
0

我认为要做你正在做的事情,你将不得不做你对 document_start 所做的事情,然后通过 ajax 调用加载 html 页面并自己解析它。

浏览器通常不会加载所有脚本然后执行它们,这是按页面顺序异步发生的,所以没有一点你可以在 javascript 将被加载但什么都不会执行的地方捕捉到它(除非您也可以控制页面的内容)。

于 2015-06-12T01:21:38.467 回答