仅当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()函数有时也会被拒绝(为什么?,您知道什么,忽略原因,只是当它未被拒绝时,为什么我的图标没有被拒绝)隐藏/禁用)
答案 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
或chrome.pageAction.setIcon
。
declarativeContent.SetIcon
,因为它需要较少的权限并且速度更快。
如果您选择使用declarativeContent.SetIcon
,则需要注意另一个问题(Can't pass arguments to chrome.declarativeContent.SetIcon),因为它会使您少走弯路。