如何有选择地显示Chrome扩展程序工具栏图标?

时间:2014-09-10 08:52:55

标签: javascript google-chrome-extension

我有一个带背景页面的chrome扩展程序。 background.js脚本仅在某些站点上正确运行(按预期)。如何在未使用的网站上隐藏Google Chrome工具栏中的图标?优选地,仅在清单中定义的站点上显示图标是允许的。

我正在尝试使用pageActions,这是我目前无效的代码。没有显示图标。

// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Called when the url of a tab changes.
function checkForValidUrl(tabId, changeInfo, tab) {
// If the tabs url starts with "http://specificsite.com"...
if (tab.url.indexOf('http://') == 0) {
// ... show the page action.
chrome.pageAction.show(tabId);
}
};

// Listen for any changes to the URL of any tab.
chrome.tabs.onUpdated.addListener(checkForValidUrl);

清单:

  "page_action": {
        "default_icon": "key.png",
        "default_title": "Download this Deck"
  },
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },

编辑:在我重新加载扩展程序之后似乎工作,直到我使用以下代码切换标签:

chrome.tabs.getSelected(null, function(tab) {
    chrome.pageAction.show(tab.id);
});

2 个答案:

答案 0 :(得分:1)

有一个特定的API可以匹配您的案例,declarativeContent API

当前实施的唯一可能操作是根据一组规则显示“页面操作”按钮。有关更多示例,请参阅文档。

chrome.runtime.onInstalled.addListener(function(details) {
  var rule = {
    conditions: [
      new chrome.declarativeContent.PageStateMatcher({
        pageUrl: { hostSuffix: 'example.com' },
      })
    ],
    actions: [ new chrome.declarativeContent.ShowPageAction() ]
  };

  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    chrome.declarativeContent.onPageChanged.addRules([rule]);
  });
});

答案 1 :(得分:0)

您应该使用页面操作而不是浏览器操作。 它专为您所要求的而设计。

https://developer.chrome.com/extensions/pageAction