我正在用开发面板编写DevTools Chrome扩展名。DevTools脚本可以使用chrome.devtools.inspectedWindow.reload
重新加载页面并在其他脚本运行之前运行脚本(在检查窗口中的每个帧中)。但是,注入的脚本不再用于后续页面重新加载和新创建的帧。
如何将脚本注入在检查窗口中每个后续页面加载开始时运行的检查窗口?
我知道我可以使用在document_start
上运行的内容脚本,但是无论Dev面板是否打开,这都会在每个页面的开头运行脚本 - 并且该脚本是密集的,所以我想不需要时避免运行脚本。
DevTools脚本可以以某种方式聆听检查窗口中的页面加载的开始,并通过在页面上下文中运行脚本来响应?
您可以在不需要的情况下避免运行脚本的一个选项是程序化注入。所讨论的:
当您的JavaScript或CSS代码不应注入与模式匹配的每个页面时,将代码插入页面很有用,例如,如果您只想在用户单击浏览器操作的ICON时脚本运行。
要将代码插入页面,您必须具有以下内容:
- 您的扩展名必须具有 cross-origin权限 for页面。
- 它还必须能够使用
chrome.tabs
模块。- 您可以使用清单文件的权限字段获得两种权限。
- 设置了权限后,您可以通过调用 tabs.executescript 。
也在 chrome.devtools.inspectedwindow中也讨论过,在检查窗口中执行代码中,请使用tabs.executeScript
方法,除非您需要eval
方法提供的特定功能。
但是,在扩展组件之间进行通信,请注意:
DevTools页面无法直接调用
tabs.executeScript
。要从" DevTools"页面注入内容脚本,您必须使用inspectedWindow.tabId
属性检索检查窗口标签的ID,然后将消息发送到背景页面。在背景页面中,调用tabs.executeScript
注入脚本。
您可以浏览给定的文档以获取更多信息和示例。