我正在使用开发面板编写一个devtools Chrome扩展程序。 devtools脚本可以使用chrome.devtools.inspectedWindow.reload
重新加载页面并在其他脚本运行之前运行脚本(在被检查窗口的每个帧中)。但是,注入的脚本不再为后续页面重新加载和新创建的帧运行。
如何将脚本注入检查窗口中每个后续页面加载开始时运行的检查窗口?
我知道我可以使用在document_start
运行的content script,但无论开发面板是否打开,它都会在每个页面加载开始时运行脚本 - 并且脚本是密集的,所以我想避免在不需要时运行脚本。
devtools脚本能否以某种方式监听被检查窗口中页面加载的开始,并通过在页面上下文中运行脚本来响应?
答案 0 :(得分:1)
如您所说,可以使用一个可以避免在不需要时运行脚本的选项是programmatic injection。如上所述:
当您的JavaScript或CSS代码不应注入与模式匹配的每个页面时,以编程方式将代码插入页面非常有用 - 例如,如果您希望脚本仅在用户单击浏览器时运行行动的图标。
要将代码插入页面,您必须具备以下条件:
chrome.tabs
模块。
正如在chrome.devtools.inspectedWindow中在检查窗口中执行代码时所讨论的那样,除非您需要tabs.executeScript
方法提供的特定功能,否则请使用eval
方法。
但是在Communicating Between Extension Components中,请注意:
DevTools页面无法直接调用
tabs.executeScript
。要从DevTools页面注入内容脚本,您必须使用inspectedWindow.tabId
属性检索被检查窗口选项卡的ID,并将消息发送到后台页面。在后台页面中,调用tabs.executeScript
以注入脚本。
您可以查看给定的文档以获取更多信息和示例。