如何在将打开的窗口和选项卡中运行扩展

时间:2014-04-03 20:02:55

标签: google-chrome google-chrome-extension

我有一个扩展来计算样式表的数量。 按下图标后,将显示所有打开的窗口或选项卡的样式表。 但是,扩展名对以后打开的窗口和选项卡没有影响。 我该如何解决?

的manifest.json

{
 "name": "StyleSheets counter",
 "description": "It counts the stylesheets linked with the web page",
 "version": "2.0",
 "permissions": [
    "tabs", 
"*://*/*",
    "activeTab",
"debugger" 
  ],
 "background": {
 "scripts": ["background.js"],
 "persistent": false
},
"browser_action": {
"default_icon": "SS Counter"
},
"icons": {
    "48": "on.png", 
"48": "off.png" 
},
 "manifest_version": 2
}

background.js

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: 'counter_ss.js' });
            }
          }
        });
      }
    });
}

counter_ss.js

var theSheets = document.styleSheets;
alert("Number of stylesheets: " + theSheets.length);

2 个答案:

答案 0 :(得分:0)

使用您的函数executeScriptsInExistingTabs添加onClicked事件侦听器作为回调。

答案 1 :(得分:0)

我已经有了解决方案,用于新标签用于其网址已更改

chrome.tabs.onCreated.addListener(function(tab) {
      //none is done here
});

chrome.tabs.onUpdated.addListener(function(tabid, info, tab) {
      if (info.status == "complete") {
          chrome.tabs.executeScript(tabid, {file:'counter_ss.js'});
      }
});

中的代码
chrome.tabs.onUpdated.addListener

同时运行,新标签打开时标签页的网址更改。所以为了避免重复,没有在

中完成
chrome.tabs.onCreated.addListener

但是,它必须在那里(尽管空洞)。