Chrome扩展程序:使其在每次页面加载时运行


91

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


以防万一,应该在浏览器中加载任何页面后运行脚本。
albertosh

@ZloySmiertniy是的,仅查找内容脚本,还要确保在run_at选项中放置document_end并匹配:您需要指定将脚本注入到哪个url中。
albertosh

Answers:


92

后台脚本中,您可以侦听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

  }
})

8
Uncaught TypeError: Cannot read property 'onUpdated' of undefined
2015年

2
什么?这个答案来自两年半以前。现在一切都可能改变了。
fiatjaf 2015年

1
对于特定的网址页面:if (tab.url.startsWith("https://example.com") == false) return;
Nabi KAZ,

47

如果需要onload在页面事件上运行(这意味着文档及其所有资产已加载),则需要将其放置在要跟踪的每个页面中的内容脚本onload


14
最好在content_script清单中的“ document_end”处插入内容脚本,参见“ run_at”:run_at: "document_end"
Mohamed Mansour


10

此代码应执行以下操作:

manifest.json

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

content.js

alert('Hello world!')

是否可以在“匹配”字段中使用regexp?
Bootuz

是的,请参阅https://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.