为什么我的 chrome pageAction 在点击时不会触发 onClicked?

Mit*_*tch 6 javascript google-chrome google-chrome-extension

我有一个简单的 chrome 扩展,它的意思是pageAction在特定域上显示时间。

清单.json:

{
  "name" : "Page action by content",
  "version" : "1.1",
  "description" : "Shows a page action for HTML pages containing a video",
  "background" : {
    "scripts": ["background.js"],
    "persistent": false
  },
  "page_action" :
  {
    "default_icon" : "video-19.png",
    "default_title" : "There's a <video> in this page!"
  },
  "permissions": [ "declarativeContent" ],
  "icons" : {
    "48" : "video-48.png",
    "128" : "video-128.png"
  },
  "manifest_version": 2
}
Run Code Online (Sandbox Code Playgroud)

背景.js:

chrome.runtime.onInstalled.addListener(function () {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function () {
      chrome.declarativeContent.onPageChanged.addRules([
          {
              conditions: [
                  new chrome.declarativeContent.PageStateMatcher({
                      pageUrl: { hostSuffix: 'stackoverflow.com' },
                  })
              ],
              // And shows the extension's page action.
              actions: [new chrome.declarativeContent.ShowPageAction()]
          }
      ]);
  });
});

chrome.pageAction.onClicked.addListener(function (tab) {
  alert('hello!');
});
Run Code Online (Sandbox Code Playgroud)

在大多数计算机上,这可以正常工作。在少数情况下,alert()用户看到的不是预期的 ,而是扩展的右键单击菜单(如果操作被禁用或右键单击,通常会显示)。图标亮起,好像它已启用,但onClicked不执行侦听器。

更奇怪的是,当最初安装扩展时,它甚至在少数计算机上也能按预期工作。只有在 Chrome 重新启动后才会出现错误行为。无论扩展程序是从 Chrome 商店加载还是解压加载,都会发生这种情况。

它也可以使用其他扩展程序(尤其是演示站点 baidu.com 的page-action-demo)进行复制。 browserActions 不受影响。

看似简单的错误是否潜伏着错误,manifest.json或者我是否需要提交错误?

Ole*_*iuk 2

正如chrome.pageAction.onClicked.addListener所说

\n\n
\n

如果页面操作有弹出窗口,则不会触发此事件。

\n
\n\n

这意味着你的manifest.json应该包含类似的东西(你有它)

\n\n
"page_action": {\n     "default_title": "Google Mail",      // optional;\n     "default_icon": "images/icon32.png"  // optional;\n} \n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

"default_popup": "popup.html" <----------------应该删除

\n
\n\n

下一步是显示特定选项卡的“页面操作”。我不知道为什么,但由于某些原因,它是可见的且处于活动状态,当您单击它时,它会显示上下文弹出菜单

\n\n
chrome.pageAction.show(integer tabId, function callback)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在后台脚本 \xe2\x8f\xab 中执行此操作后

\n\n
 `chrome.pageAction.onClicked` \n
Run Code Online (Sandbox Code Playgroud)\n\n

应该触发该事件。我希望它能帮助你。

\n

  • 类似于`chrome.tabs.onActivated.addListener(function (tabs) { chrome.pageAction.show(tabs.tabId); });` (6认同)