Chrome扩展程序 - 仅为活动标签更改default_icon

时间:2015-03-05 18:18:36

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

我正在构建一个简单的扩展,要求default_icon根据页面中是否存在JS变量而更改。就这么简单,至少这个功能。

我设法在这个条件下更改每个页面加载的图片,但是我想进一步改变用户浏览器中所有加载标签的图片,只要用户更改他关注的标签。 我在尝试仅为活动选项卡更改default_icon时遇到了麻烦。

有谁知道我应该如何继续这样做? (我仍然是编写Chrome扩展程序的初学者)

我的内容.js:

if (test == "OK") {
    // Setting OK Icon
    chrome.runtime.sendMessage({"message": "Existing"});
}
else if (test == "NOK") {
    // Setting NOK Icon
    chrome.runtime.sendMessage({"message": "Not existing"});
}

我的background.js:

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if( request.message === "Existing" ) {
        chrome.browserAction.setIcon({path:"OKicon.png"});
    }

    if( request.message === "Not Existing" ) {
        chrome.browserAction.setIcon({path:"NOKicon.png"});
    }
  }
);

2 个答案:

答案 0 :(得分:3)

好吧,你应该看看chrome.browserAction.setIcon documentation

  

整数(可选)tabId

     

将更改限制为选择特定选项卡的时间。选项卡关闭时自动重置。

正是需要的!现在,标签ID为reported in the sender parameter

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if( request.message === "Existing" ) {
        chrome.browserAction.setIcon({
            path:"OKicon.png",
            tabId: sender.tab.id
        });
    }

    if( request.message === "Not Existing" ) {
        chrome.browserAction.setIcon({
            path:"NOKicon.png",
            tabId: sender.tab.id
        });
    }
  }
);

答案 1 :(得分:0)

你基本上就在那里。您需要做的就是将您在内容脚本中的逻辑包装为window focus事件的回调。

window.onfocus = function(){
  if (test == "OK") {
      // Setting OK Icon
      chrome.runtime.sendMessage({"message": "Existing"});
  } else {
      // Setting NOK Icon
      chrome.runtime.sendMessage({"message": "Not existing"});
  }
}

当用户更改焦点时,background脚本将从context脚本接收运行时消息,并相应地更改扩展图标。