首页 > 解决方案 > chrome.browserAction, 禁用 图标

问题描述

我正在尝试根据内容脚本的匹配来禁用或启用我的 chrome 扩展,但我认为有更好的方法。下面是我的代码。似乎我试图完成的事情可以通过chrome.declarativeContent.onPageChanged来实现,但这似乎并没有持续触发。

const IsMatch = (tab, matches) => {
 if (tab ==undefined && tab == null && tab.url == undefined){
  return false;
}

for(var ctr = 0; ctr < matches.length ; ctr ++){
  var match = matches[ctr].substring(0, matches[ctr].length - 1);
  if (tab.url.startsWith(match) ) {
    return true;
  }
}
return false;
}



const updateIcon = tabId => {
    chrome.browserAction.disable();
    chrome.tabs.query({ currentWindow: true, active: true }, function (tabs) {
        var contentScripts = chrome.runtime.getManifest().content_scripts;
        for(var i = 0; i < contentScripts.length ; i ++){
          var contentScript = contentScripts[i];
          if ( IsMatch(tabs[0], contentScript.matches) ) {
            chrome.browserAction.enable();
            console.log('chrome.tabs.query');
            console.log(tabs[0]);
            return;
          }
        }
    });
  };
  chrome.tabs.onUpdated.addListener(updateIcon);

在@wOxxOm 推荐的更改之后,我现在处于竞争状态,这里是更新的代码

 browser.runtime.onMessage.addListener(function(request, sender, sendResponse) {  
    if (request.message === 'enableIcon') {
      console.log(sender.tab.id + ' ' + request.message);
      chrome.browserAction.setIcon({tabId: sender.tab.id, path: 'icon-16.png'});
      browser.browserAction.enable();
    }
    return true;
  });

  browser.tabs.onUpdated.addListener(function(tabId) {
    console.log(tabId + ' disableIcon');
    chrome.browserAction.setIcon({tabId: tabId, path: 'icon-16-Disabled.png'});
    chrome.browserAction.disable();
  });

这是输出:

标签: google-chrome-extension

解决方案


推荐阅读