Devtools chrome扩展:在每个帧/页面加载开始时运行脚本?

时间:2016-06-18 09:42:39

标签: google-chrome-extension

我正在使用开发面板编写一个devtools Chrome扩展程序。 devtools脚本可以使用chrome.devtools.inspectedWindow.reload重新加载页面并在其他脚本运行之前运行脚本(在被检查窗口的每个帧中)。但是,注入的脚本不再为后续页面重新加载和新创建的帧运行。

如何将脚本注入检查窗口中每个后续页面加载开始时运行的检查窗口?

我知道我可以使用在document_start运行的content script,但无论开发面板是否打开,它都会在每个页面加载开始时运行脚本 - 并且脚本是密集的,所以我想避免在不需要时运行脚本。

devtools脚本能否以某种方式监听被检查窗口中页面加载的开始,并通过在页面上下文中运行脚本来响应?

1 个答案:

答案 0 :(得分:1)

如您所说,可以使用一个可以避免在不需要时运行脚本的选项是programmatic injection。如上所述:

  

当您的JavaScript或CSS代码不应注入与模式匹配的每个页面时,以编程方式将代码插入页面非常有用 - 例如,如果您希望脚本仅在用户单击浏览器时运行行动的图标。

要将代码插入页面,您必须具备以下条件:

  1. 您的扩展程序必须具有该页面的跨域权限
  2. 它还必须能够使用chrome.tabs模块。
    • 您可以使用清单文件的权限字段获得这两种权限。
  3. 设置权限后,您可以通过调用tabs.executeScript将JavaScript注入页面。
  4. 正如在chrome.devtools.inspectedWindow中在检查窗口中执行代码时所讨论的那样,除非您需要tabs.executeScript方法提供的特定功能,否则请使用eval方法。

    但是在Communicating Between Extension Components中,请注意:

      

    DevTools页面无法直接调用tabs.executeScript。要从DevTools页面注入内容脚本,您必须使用inspectedWindow.tabId属性检索被检查窗口选项卡的ID,并将消息发送到后台页面。在后台页面中,调用tabs.executeScript以注入脚本。

    您可以查看给定的文档以获取更多信息和示例。