2014-02-20 17 views
1

试图修改我的代码,以便在单击扩展按钮时,它将在所有打开的选项卡上执行,而不是仅在活动的选项卡上执行。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"}); 
      }); 
      } 
     }); 

回答

1

尝试这样的:

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

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

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' }); 
      } 
      } 
     }); 
     } 
    }); 
} 
相关问题