Chrome扩展程序 - 查找所有打开的选项卡并执行所有脚本

时间:2014-02-20 19:04:40

标签: jquery google-chrome-extension tabs manifest

尝试在单击扩展按钮时修改我的代码,它将在所有打开的选项卡上执行,而不是仅在活动选项卡上执行。

background.js

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, { file: "jquery-2.1.0.min.js" }, function() {
    chrome.tabs.executeScript(null, {file: "change.js"});
  });
});

的manifest.json

{
  "manifest_version": 2,    
  "name": "GSHOP",
  "version": "2",
  "description": "I do Stuff",
  "background": {
    "persistent": false,
    "scripts": ["jquery-2.1.0.min.js", "background.js"]
   },
  "browser_action": {
    "name": "Manipulate DOM",
    "icons": ["icon.png"],
    "default_icon": "icon.png"
  },
  "permissions": [
    "activeTab",
    "tabs",
    "http://*/*", "https://*/*"
    ]
}

我相信我有逻辑,我只是​​想不通怎么做。我相信我需要找到有多少标签打开tabs.length?并迭代它们,但我无法让它工作。

不起作用

chrome.browserAction.onClicked.addListener(function(tabs) {
            for (var i = 0; i < tabs.length; i++) {

            chrome.tabs.executeScript(tabs[i].id, {file: "jquery-2.1.0.min.js" },    function() {
            chrome.tabs.executeScript(tabs[i].id, {file: "change.js"});
            });
            }
        });

3 个答案:

答案 0 :(得分:2)

试试这样:

chrome.browserAction.onClicked.addListener(function (tab) {
  chrome.tabs.query( {} ,function (tabs) { // The Query {} was missing here
    for (var i = 0; i < tabs.length; i++) {
      chrome.tabs.executeScript(tabs[i].id, {file: "jquery-2.1.0.min.js"});
      chrome.tabs.executeScript(tabs[i].id, {file: "change.js"});
    }
  });
});

答案 1 :(得分:1)

chrome.browserAction.onClicked回调为当前标签选择一个tab对象。不是所有标签的列表。在onClicked回调中,您必须运行chrome.tabs.query并循环浏览query回调中的标签。

答案 2 :(得分:1)

试试这个。希望这个有所帮助。

chrome.browserAction.onClicked.addListener(function(tab) {
    executeScriptsInExistingTabs();
});

function executeScriptsInExistingTabs(){
    chrome.windows.getAll(null, function(wins) {
      for (var j = 0; j < wins.length; ++j) {
        chrome.tabs.getAllInWindow(wins[j].id, function(tabs) {
          for (var i = 0; i < tabs.length; ++i) {
            if (tabs[i].url.indexOf("chrome://") != 0) {
              chrome.tabs.executeScript(tabs[i].id, { file: 'js/change.js' });
            }
          }
        });
      }
    });
}