使我的浏览器操作充当开/关开关(带有适当的图标)

时间:2014-03-21 02:04:47

标签: javascript google-chrome google-chrome-extension

我正在使用Google Chrome扩展程序,我基本上希望浏览器操作充当开/关切换。只要它是" on",它就会有一个特定的图标,并在页面上执行脚本。只要它是"关闭",它就有一个特定的图标,并且脚本不会被执行。

这是我的manifest.json

{
    "manifest_version": 2,
    "name": "Resource Control",
    "description": "Controls what resources load from a website.",
    "version": "1.0",
    "icons": {
        "16": "locked_16.png",
        "48": "locked_48.png",
        "128": "locked_128.png"
    },
    "browser_action": {
        "default_icon": "locked_16_off.png" //icon is "off" by default
    },
    "background": {
        "scripts": ["main.js"] 
    }, 
    "permissions": [
    "tabs", "http://*/*", "https://*/*"
    ]
}

这里main.js

var toggled = false;

chrome.browserAction.onClicked.addListener(function(tab) {
  toggled = !toggled;
  if(toggled){    
    chrome.browserAction.setIcon({path: "locked_16_on.png", tabId:tab.id});
    chrome.tabs.executeScript(null,{code:"document.body.style.backgroundColor='red'"});
  }

  else{
    chrome.browserAction.setIcon({path: "locked_16_off.png", tabId:tab.id});
    chrome.tabs.executeScript(tab.id, {code:"alert()"});
  }

});

if (toggled) {
    chrome.tabs.executeScript(null,{code:"document.body.style.backgroundColor='red'"});
}

现在我正在努力让这项功能正常工作,所以要测试我只是将页面的背景设置为红色。但是,每当我加载新网页时,该图标都会恢复为" off"图标即使扩展名仍在" on",脚本也不会被注入新页面。有人可以帮我找到我出错的地方吗?

1 个答案:

答案 0 :(得分:1)

当您将tabId传递给chrome.browserAction.setIcon时,它只会设置该特定标签处于活动状态时的图标。如果切换到其他选项卡,图标将恢复为默认值。

仅在点击chrome.tabs.executeScript时才会运行browserAction。如果想要在每个页面上注入代码,您需要使用在所有选项卡上注入的内容脚本,或者每次都要监听创建新选项卡并executeScript