Google chrome 当页面操作被隐藏(灰显、非活动)时,在单击页面操作时显示弹出窗口

Google chrome 当页面操作被隐藏(灰显、非活动)时,在单击页面操作时显示弹出窗口,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,我正在尝试开发一个简单的chrome扩展,可以为一些网站启用,并在单击时打开另一个页面(在新选项卡中)。到目前为止,一切都很好,非常类似 接下来,我对这个扩展使用了一个页面操作,它“只对少数页面有意义”,我对这些站点使用declarativeContent到ShowPageAction()(按主机匹配)。这很有效。在所选站点中,图标处于启用状态,单击后,将打开“新建”选项卡。在其余的站点中,图标变灰,单击时只显示扩展名和菜单(选项、删除扩展名等) 但是我还想为那些扩展应该处于非活动状态的站点显示

我正在尝试开发一个简单的chrome扩展,可以为一些网站启用,并在单击时打开另一个页面(在新选项卡中)。到目前为止,一切都很好,非常类似

接下来,我对这个扩展使用了一个页面操作,它“只对少数页面有意义”,我对这些站点使用
declarativeContent
ShowPageAction()
(按主机匹配)。这很有效。在所选站点中,图标处于启用状态,单击后,将打开“新建”选项卡。在其余的站点中,图标变灰,单击时只显示扩展名和菜单(选项、删除扩展名等)

但是我还想为那些扩展应该处于非活动状态的站点显示一个弹出窗口(只是一个简单的html,解释扩展在该页面中不起作用以及原因)。问题是onClicked事件为“”。因此,为了使扩展的主要功能正常工作(单击时在新选项卡中打开一个新页面),我必须删除manifest.json中的默认弹出窗口,并且我不知道如何为扩展不活动的站点包含弹出窗口

这是我现在使用的代码

manifest.json

  {
    "name": "Getting Started Example",
    "version": "1.0",
    "description": "Build an Extension!",
    "permissions": ["storage", "declarativeContent", "tabs"],
    "background": {
      "scripts": ["background.js"],
      "persistent": false
    },
    "page_action": {
      "default_icon": {
        "16": "images/get_started16.png",
        "32": "images/get_started32.png",
        "48": "images/get_started48.png",
        "128": "images/get_started128.png"
      }
    },
    "manifest_version": 2
  }
background.js

  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    chrome.declarativeContent.onPageChanged.addRules([{
      conditions: [new chrome.declarativeContent.PageStateMatcher({
        pageUrl: {hostEquals: 'developer.chrome.com'},
      })
      ],
          actions: [new chrome.declarativeContent.ShowPageAction()]
    }]);
  });
});

// listen to onClicked event ...
// ... but "This event will not fire if the page action has a popup." 
// see https://developer.chrome.com/extensions/pageAction#event-onClicked
chrome.pageAction.onClicked.addListener(function(activeTab) {
  var newURL = "http://www.youtube.com/";
  chrome.tabs.create({ url: newURL });
});

只需在manifest.json中声明browser_操作,而不用使用page_操作和declarativeContent。在弹出脚本中,您只需检查活动选项卡的URL(参见chrome.tabs.query的示例),并根据该URL显示/隐藏弹出html.thx@wOxxOm中相应的DOM元素。我不在笔记本电脑中测试它,但回家后,会问几个问题。1.我认为如果有弹出窗口,浏览器操作的
onClicked
事件也不会触发,就像页面操作一样。所以,我不确定这是否是解决方案。2.使用浏览器操作时,我需要“手动”将图标灰显,或者它也会自动灰显,就像页面操作一样。嗯,不要使用onClicked,你不需要它,只需将代码放在弹出脚本中即可。2.默认情况下,在manifest.json中使用手动灰色图标,并从后台脚本(例如在chrome.tabs.onUpdated listener中)调用chrome.browserAction.setIcon,在适用的URL.thx@wOxxOm上使用彩色图标。我将尝试这样做。出于某种原因,我假设
chrome.tabs.create({url:newURL})在弹出脚本中不起作用,只在单击一次的事件中起作用。但我想你是对的。我真的不明白为什么它不会。