j4p
j4p

Reputation: 31

Change chrome extension icon when tab or url changes

I'm working on an extension and I want the icon to change when the active tab or url changes. Here's what i have so far:

manifest.json

{
  "manifest_version": 2,

  "name": "Link2QR",
  "description": "chrome_extension",
  "version": "1.0",

  "browser_action": {     
    "default_icon":"icon.png",    
    "default_popup": "popup.html"
   },

  "permissions": [
  "activeTab",
  "https://ajax.googleapis.com/",
  "tabs"
   ],

 "content_scripts": [
  {
    "matches": ["<all_urls>"],
    "js": ["content.js"]
   }
 ]
}

content.js

if(onSupportedPageNeedChangeIcon) {
    chrome.runtime.sendMessage({ "newIconPath" : "testimage.png" });
}

popup.js

chrome.runtime.onMessage.addListener(
   function(request, sender, sendResponse) {
   chrome.browserAction.setIcon({
       path: request.newIconPath,
       tabId: sender.tab.id
   });
});

Upvotes: 1

Views: 1283

Answers (1)

Maluen
Maluen

Reputation: 1841

You are handling the message in popup.js, which I suppose is running in the browser_action popup page.

popup.js thus only runs when the extension button is clicked.

You should instead handle it in background.js:

manifest.json

{
  "manifest_version": 2,
  "name": "test",
  "version": "0.0.1",
  "background": {
    "scripts": ["background.js"]
  },
  "browser_action": {
    "default_icon": {
      "24": "icon.png",
      "25": "icon.png"
    }
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content.js"]
    }
  ]
}

background.js

chrome.runtime.onMessage.addListener(
   function(request, sender, sendResponse) {
   chrome.browserAction.setIcon({
       path: request.newIconPath,
       tabId: sender.tab.id
   });
});

Upvotes: 2

Related Questions