首页 > 解决方案 > Chrome 扩展 - 注入脚本并在非活动选项卡上运行它

问题描述

我有 Chrome 扩展程序,可以在加载时将脚本注入页面。如果是某个页面,它会在该页面上的新选项卡中打开一组链接,并且当加载这些选项卡时,注入的脚本会在选项卡上提交一个表单。问题是注入没有发生在不是当前的选项卡上。它仅适用于当前选项卡。

我的代码的简化版本:

清单.json

{
  "name": "name",
  "version": "0.0.1",
  "manifest_version": 2,
  "description": "Doing stuff",
  "background": {
    "scripts": [
      "background.js"
    ],
    "persistent": true
  },
  "browser_action": {
    "default_title": "Bot"
  },
  "permissions": [
    "https://*.url.com/*",
    "*://*/*",
    "tabs"
  ]
}

背景.js:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {


    if(changeInfo.status == 'complete') {

        try {
            chrome.tabs.executeScript(tab.ib, {
                file: 'inject.js'
            });

        } catch(err) {
            console.log(" extension cannot run on the chrome:// page ")
        }
    } 

})

注入.js:

(function() {

    function page1() {

        links = document.querySelectorAll("a.link_class");
        for(var link in links) {
            link.setAttribute("target", "_blank");
            link.click();
        }
    }

    function page2() {
        // this does not run in tabs that are inactive
        // in order to make it run, i have to click in the inactive tab and reload it manually
        document.querySelector("input[name='field_to_update']").text = "setting the field value";
        button = document.querySelector("input[name='button']");
        button.click();
    }

    if(document.querySelector("div.page1") != null) {
        page1();
    } else {
        page2();
    }
})();

标签: javascriptgoogle-chrome-extension

解决方案


推荐阅读