Chrome 扩展:让它在每个页面加载时运行

IT技术 javascript google-chrome google-chrome-extension
2021-02-14 06:26:28

我想制作一个在页面加载后执行一些脚本的 chrome 扩展,我不确定我是否必须在后台页面上实现这个逻辑,或者它可以在其他任何地方,这里的任何帮助将不胜感激。

4个回答

后台脚本中,您可以侦听chrome.tabs.onUpdated事件并检查changeInfo.status回调的属性它可以是正在加载已完成如果完成,请执行操作。

例子:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete') {

    // do your things

  }
})

因为这可能会在每个选项卡完成时触发,您还可以检查选项卡是否active在其同名属性上,如下所示:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {

    // do your things

  }
})
对于做特定的 url 页面: if (tab.url.startsWith("https://example.com") == false) return;
2021-04-16 06:26:28
2021 年 11 月,使用 v3,这完美地工作。不过这&& tab.active似乎是不必要的。
2021-04-21 06:26:28
什么?这个答案来自两年半前。现在一切都可能已经改变了。
2021-05-04 06:26:28
Uncaught TypeError: Cannot read property 'onUpdated' of undefined
2021-05-13 06:26:28
@Green Chrome 现在有 Manifest v3,所以一切都会改变更多:)
2021-05-15 06:26:28

如果它需要onload在页面事件上运行,这意味着文档及其所有资产都已加载,则这需要嵌入在您希望跟踪的每个页面中的内容脚本onload

最好让内容脚本在“document_end”处注入,参见 content_script 清单中的“run_at”: run_at: "document_end"
2021-05-02 06:26:28

您可以将脚本放入内容脚本中,请参阅

这段代码应该这样做:

清单文件.json

   {
      "name": "Alert 'hello world!' on page opening",
      "version": "1.0",
      "manifest_version": 2,
      "content_scripts": [
        {
          "matches": [
            "<all_urls>"
          ],
          "js": ["content.js"]
        }
      ]
    }

内容.js

alert('Hello world!')
是否可以在“匹配”字段中使用正则表达式?
2021-04-22 06:26:28
是的,看 https://developer.chrome.com/extensions/content_scripts#matchAndGlob
2021-05-11 06:26:28