为什么我的Chrome pageAction在点击时无法触发onClicked?

时间:2019-01-24 04:47:15

标签: javascript google-chrome google-chrome-extension

我有一个普通的chrome扩展名,意思是在特定域上出现pageAction

Manifest.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
}

background.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!');
});

在大多数计算机上,这可以正常工作。在少数人群中,用户没有看到预期的alert(),而是看到了扩展名的右键单击菜单(如果禁用或右键单击该操作,通常会显示该菜单)。图标会亮起,好像已启用一样,但是未执行onClicked侦听器。

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

它也可以与其他扩展名一起复制(page-action-demo,尤其是在演示网站baidu.com中)。 browserAction个不受影响。

看似简单的manifest.json中是否存在错误?还是我需要提交错误?

1 个答案:

答案 0 :(得分:0)

chrome.pageAction.onClicked.addListener所说

  

如果页面操作弹出,则不会触发该事件

这意味着您的manifest.json应该包含类似的内容(您有)

"page_action": {
     "default_title": "Google Mail",      // optional;
     "default_icon": "images/icon32.png"  // optional;
} 
  

“ default_popup”:“ popup.html” <---------------- 应删除

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

chrome.pageAction.show(integer tabId, function callback)

在后台脚本中完成此操作后

 `chrome.pageAction.onClicked` 

应该触发该事件。希望对您有所帮助。