【问题标题】:On page load event in Chrome extensionsChrome 扩展中的页面加载事件
【发布时间】:2012-03-25 17:08:51
【问题描述】:

我想在 chrome 浏览器页面完全加载后检查其内容中的一些值 像这样

if(document.body.innerText.indexOf("Cat") !=-1)

我可以在何时何地进行支票?请给我一个清楚的例子 我读了一些关于“Background.html”和“内容脚本”的东西,但我做不到

【问题讨论】:

    标签: google-chrome-extension


    【解决方案1】:

    Register a content script in the manifest file "run_at": "document_idle"(这是默认设置)并将您的代码放入内容脚本文件中。然后当页面准备好时,脚本就会运行。

    如果您想从后台页面检测页面是否已完全加载,请使用chrome.webNavigation.onCompleted 事件并做任何您想做的事情,例如调用chrome.tabs.executeScript 来执行内容脚本。如果 URL 列表是动态的,或者无法使用 match pattern 语法描述 URL 模式,则此方法可能比以前的方法有用。

    chrome.webNavigation.onCompleted.addListener(function(details) {
        chrome.tabs.executeScript(details.tabId, {
            code: ' if (document.body.innerText.indexOf("Cat") !=-1) {' +
                  '     alert("Cat not found!");' +
                  ' }'
        });
    }, {
        url: [{
            // Runs on example.com, example.net, but also example.foo.com
            hostContains: '.example.'
        }],
    });
    

    webNavigation 和主机权限必须在manifest.json 中设置,例如:

    {
      "name": "Test",
      "version": "1.0",
      "background": { "scripts": ["background.js"] },
      "permissions": [ "webNavigation", "*://*/*" ],
      "manifest_version": 2
    }
    

    【讨论】:

    • 谢谢 Rob W,但是我在 check 语句后面有很多代码,我不能在 "code:'" 后面写它我可以调用一个函数吗?
    • @user1291538 您可以将其放在扩展名中的单独文件中,并使用file: 'nameoffile.js' 而不是'code': '...' - 另见linked documentation
    • 有没有办法只检查特定 TAB ID 的 onCompleted 事件。我需要这个,因为我不想在加载多个选项卡时注入脚本,因为代码一次只需要运行一个选项卡,而不需要在网站的多个选项卡上运行。我想要它,这样我就可以根据标签 ID 将脚本注入到正在使用的标签中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多