Javascript chrome.pageAction.show()不是';t在tabs.onCreated侦听器中工作

Javascript chrome.pageAction.show()不是';t在tabs.onCreated侦听器中工作,javascript,json,google-chrome,google-chrome-extension,Javascript,Json,Google Chrome,Google Chrome Extension,background.js: chrome.tabs.onCreated.addListener(function(tab) { chrome.pageAction.show(tab.id);//Doesn't work...icon is still grey }); 这是我的扩展代码的一部分。我希望每个新选项卡在创建时都显示页面操作。不幸的是,chrome.pageAction.show()不起作用。每次我创建一个新选项卡时,它的图标都会灰显 然而,令我惊讶的是,如果我从控

background.js:

 chrome.tabs.onCreated.addListener(function(tab) {

    chrome.pageAction.show(tab.id);//Doesn't work...icon is still grey

 });
这是我的扩展代码的一部分。我希望每个新选项卡在创建时都显示页面操作。不幸的是,
chrome.pageAction.show()
不起作用。每次我创建一个新选项卡时,它的图标都会灰显

然而,令我惊讶的是,如果我从控制台调用
chrome.pageAction.show()
,它工作得非常好

manifest.json

{
  "name": "show Page Action",
  "description": "show icon in all tabs",
  "version": "1.0",
  "background": {
    "scripts": ["jquery-3.1.1.min.js", "background.js"]
  },
  "page_action": {
    "default_icon": "icon_true.png"
  },
  "manifest_version": 2
}

pageAction API基于URL,因此您需要使用tabs.onUpdate,它在OnCreate之后执行,并具有不同的参数:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (changeInfo.url) {
        chrome.pageAction.show(tabId);
    }
});

不要忘了在中添加
“选项卡”

谢谢。您能详细说明一下为什么onCreated不起作用吗?在onCreated事件中,选项卡还没有URL,因为选项卡没有绑定到某个URL,它会在几分钟后开始加载,并在OnUpdate事件中报告。由于pageAction API是基于URL设计的,因此它只有在选项卡URL已知时才初始化,即在包含
URL
changeInfo
的未更新事件中。为什么权限不能是“activeTab”而不是“tabs”?如果这对您的工作流足够,它当然可以是“activeTab”。