Chrome扩展程序 - 页面操作:定义页面

时间:2017-04-18 21:26:28

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

我正在尝试构建一个虚拟的Chrome扩展程序。我希望它只在特定页面中运行,所以我使用的是Page Action。

假设我希望页面操作在Instagram网站上运行,然后(相应carrierwave-flickr),我需要manifest.json这样的内容吗?

{
  "manifest_version": 2,
  "name": "Some name",
  "version": "0.0.3",
  "description": "Some description",
  "content_scripts": [
    {
      "matches": [
        "https://www.instagram.com/*"
      ],
      "js": ["content.js"]
    }
  ],
  "page_action": {
    "default_icon": "icon.png"
  },
  "background": {
    "scripts": ["background.js"]
  }
}

虽然内容脚本只在Instagram页面上运行,但浏览器扩展名不可点击(灰色外观,当我点击大多数选项时无法点击)。

这使得无法在点击扩展按钮时采取行动。在我的background.js我有:

function click(tab) {
  console.log('click from ' + tab);
}

chrome.pageAction.onClicked.addListener(click);

永远不会被召唤。

那么,在点击某些页面时无法采取行动会出现什么问题呢?

  

注意:我看到了这个问题/答案,但找不到问题/解决方案the docs

1 个答案:

答案 0 :(得分:1)

您必须致电pageAction.show才能启用pageAction按钮(可点击)。

pageAction documentation说(强调我的):

  

您分别使用pageAction.showpageAction.hide方法显示页面操作并显示为灰色。 默认情况下,页面操作显示为灰色。显示时,指定应显示图标的选项卡。图标保持可见,直到选项卡关闭或开始显示不同的URL(例如,因为用户单击链接)。

使用 manifest.json content_scripts条目

因为您已经拥有一个在您希望启用此功能的页面上运行的内容脚本,所以最简单的方法是让您的内容脚本send a message告诉您的后台脚本webNavigation.onCompleted 1}}该标签的页面操作按钮。

您的内容脚本可能如下所示:

show

您的后台脚本可能类似于:

chrome.runtime.sendMessage({type: showPageAction});

没有 manifest.json chrome.runtime.onMessage(function(message, sender, sendResponse) { if(typeof message === 'object' && message.type === 'showPageAction') { chrome.pageAction.show(sender.tab.id); } }); 条目

如果您没有内容脚本,您可能希望使用tabs.onUpdated侦听器或https://www.mozilla.org/en-US/firefox/organizations/all/侦听器来侦听选项卡URL中的更改,以确定该页面 - 应显示动作按钮。显然,调用content_scripts的触发器不一定是当前显示在选项卡中的URL,但这是最常见的。