Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展-在浏览器上加载js之前获取Html DOM_Javascript_Html_Dom_Google Chrome Extension_Onbeforeload - Fatal编程技术网

Javascript Chrome扩展-在浏览器上加载js之前获取Html DOM

Javascript Chrome扩展-在浏览器上加载js之前获取Html DOM,javascript,html,dom,google-chrome-extension,onbeforeload,Javascript,Html,Dom,Google Chrome Extension,Onbeforeload,我正在开发一个chrome扩展,它需要阻止html页面的加载,对javascript进行一些验证,在页面中,在我的内容脚本中出现,然后继续(或不继续)加载页面 在带有“run_at”:“document_start”的清单中,内容纸条得到一个空html,无法进行验证。在文档末尾运行时,它会执行页面中的js,然后我的扩展会对其进行验证 有没有一种方法可以像我的内容脚本中的DOMContentBeforeLoad那样设置?我真的别无选择 谢谢我想要做你正在做的事情,你必须做你在document_st

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

在带有“run_at”:“document_start”的清单中,内容纸条得到一个空html,无法进行验证。在文档末尾运行时,它会执行页面中的js,然后我的扩展会对其进行验证

有没有一种方法可以像我的内容脚本中的DOMContentBeforeLoad那样设置?我真的别无选择


谢谢

我想要做你正在做的事情,你必须做你在document_start上做的事情,然后通过ajax调用加载html页面并自己解析它


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

看看TopLevel.js的工作原理:(有趣的来源于)

它是一个可以显式包含在页面中的库。当在页面中找到它时,立即运行它document.write()是一个style='display:none'元素,它会立即停止浏览器解析页面的其余部分,并隐藏纯文本结果(纯文本是一个不推荐使用的元素,它停止解释页面内容,并将所有HTML视为普通的未解析纯文本:)

Toplevel然后解析元素本身的文本内容(并执行一些模板化,这是库的要点),然后document.write()手动将生成的新内容添加到页面中


您应该能够执行类似的操作:插入一个元素以停止浏览器解析的页面,自己解析(或用它做任何您想做的事情),然后潜在地写出任何您喜欢的内容(包括原始内容)一旦你高兴了,就下载到该页面。

这可能会有帮助,但我不太确定:在这种情况下不会,但感谢对另一个问题的回答可能会帮助你开始:已经尝试过了,它仍然会在运行内容脚本的js之前加载该页面,不像我没有尝试过的那样将其作为答案,但可以从后台页面加载安装一个可以修改响应的网络请求钩子。它监视传入的页面请求并修改返回的数据,这样chrome就可以像加载原始版本一样加载您的修改版本。为什么会这样呢?他自己的页面ajax不太可能在chrome之前完成,chrome在您之前启动了相同的请求。是的,是的不愉快的(或表演)命题,但我知道预加载/解析页面是唯一一种方法,它实际上可以让他在加载任何内容之前看到内容。然后他必须允许页面加载。你的建议也可能有效,但我不确定他是否可以在加载前处理所有内容,或者一次只处理一个内容。我该如何做到这一点我已经收到响应的页面的l?感谢您的帮助您必须停止页面响应,直到您准备好响应为止,并且html可以通过GET请求轻松拉入(这就是浏览器正在做的全部工作)。解析它将是一个巨大的痛苦,尽管可能有一个库来完成这项工作。如果您不喜欢此解决方案,您显然可以采取另一种方法,但我不确定您是否会找到可以在将javascript流式传输到端部时暂停dom加载的方法。如果不需要阻止,您可能可以处理javascript加载,但要同时完成这两项工作,不需要简单的几行代码回答。不。这个答案不起作用。也不清楚为什么建议解析html。请看我的问题和上面的答案