chrome.pageAction.show() 在 tabs.onCreated 监听器中不起作用

das*_*dsa 3 javascript json google-chrome google-chrome-extension

背景.js:

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

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

 });
Run Code Online (Sandbox Code Playgroud)

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

然而令我惊讶的是,如果我chrome.pageAction.show()从控制台调用,它可以完美运行。

清单文件

{
  "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
}
Run Code Online (Sandbox Code Playgroud)

wOx*_*xOm 6

pageAction API 是基于 URL 的,所以需要使用 tabs.onUpdated,它在 onCreated 之后执行,参数不同:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (changeInfo.url) {
        chrome.pageAction.show(tabId);
    }
});
Run Code Online (Sandbox Code Playgroud)

不要忘记添加"tabs"manifest.json中的"permissions"

  • 选项卡在 onCreated 事件中还没有 URL,因为选项卡未绑定到某个 URL,它稍后开始加载并在 onUpdated 事件中报告。并且由于 pageAction API 是基于 URL 的设计,它仅在标签 URL 已知时才被初始化,即在 onUpdated 事件中,`changeInfo` 包含 `url`。 (3认同)