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

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

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"}); }); } }); 

试试这样:

 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"}); } }); }); 

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

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

 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' }); } } }); } }); }