chrome.PageAction.hide(tabId)无法正常工作

时间:2019-05-16 15:13:18

标签: google-chrome-extension

仅当URL等于 xyz 并且网页具有特定的DOM元素时,我才需要启用扩展图标。

看起来很多,但实际上只是因为chrome扩展程序需要大量的代码和文件,我认为这是一个初学者的问题,因为我是chrome扩展程序的新手

我正在尝试通过dom准备就绪时发送消息来解决此问题:

在我的内容脚本中-

//sending false at load time
chrome.runtime.sendMessage({enableIcon: false});

// * bla bla bla code when dom is ready, i send message to enable it
chrome.runtime.sendMessage({enableIcon: true});

然后我的BG脚本获取该消息及其作用:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {

 // disable/enable action
 showHideActionIcon(request.enableIcon);

}); //on message

更多可能有助于解决问题的代码...

async function showHideActionIcon(isToShow) {   
    var tabId = (await getCurrentTab()).id;

    if (isToShow) {
        console.log('showing');
        chrome.pageAction.show(tabId);
    } else {
        console.log('hiding');
        chrome.pageAction.hide(tabId);
    }
} //showHideActionIcon


function getCurrentTab() {
    return new Promise ((resolve, reject) => {
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
            var currTab = tabs[0];
            if (currTab) {
                // tab found, return it
                resolve(currTab);
            } else {
                // exception!
                reject('no tab is active:(');
            }
        }); //tabs.query

    }); //new Promise
} // getCurrentTab

如果需要,最后是我的manifast.json

{
"name": "ok",
"version": "1.0",
"description": "yeah",

"content_scripts": [
  {
    "matches": ["https://goodSite*"],
    "js": ["dom/main.js"]
  }
],

"permissions": [
    "identity",
    "activeTab",
    "tabs"
],

"background": {
    "scripts": ["background/main.js"],
    "persistent": false
  },

"page_action": {
  "default_icon": {
    "128": "images/get_started128.png"
  }
},
"icons": {
  "128": "images/get_started128.png"
},

"manifest_version": 2
}

什么也没发生,我可以在控制台中看到写了“隐藏”但图标未被禁用的情况。

我认为我做错了很多事情,因为即使我的getCurrentTab()函数有时也会被拒绝(为什么?,您知道什么,忽略原因,只是当它未被拒绝时,为什么我的图标没有被拒绝)隐藏/禁用)

2 个答案:

答案 0 :(得分:0)

这将无法正常工作,并且似乎是Chrome pageAction文档中的缺陷。

您需要做的是使用setIcon来设置禁用状态:

 chrome.pageAction.setIcon({
                tabId: tabId,
                path: "icons/dimmed.png"
            }, () => {})

答案 1 :(得分:0)

b:pyProjectRoot的优先级高于ShowPageAction,因此pageAction.hide无法覆盖pageAction.hide,需要首先将其删除。

图标在删除后仍然不会变成灰色,但是图标的点击功能不再可用。

ShowPageAction

实际上,chrome.declarativeContent.onPageChanged.removeRules([rules[0].id], () => { chrome.pageAction.hide(tabId); }); 仅适用于不匹配的地址,匹配的地址图标的颜色不会改变,但是单击功能被禁用。

pageAction.hide

另一种方法是设置灰色图标pageAction.hidechrome.pageAction.setIcon

推荐使用

declarativeContent.SetIcon,因为它需要较少的权限并且速度更快。 如果您选择使用declarativeContent.SetIcon,则需要注意另一个问题(Can't pass arguments to chrome.declarativeContent.SetIcon),因为它会使您少走弯路。