2014-02-20 16 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' }); 
      } 
      } 
     }); 
     } 
    }); 
} 
相關問題