Chrome扩展程序仅在单击某些网页时才会起作用

时间:2014-03-19 16:13:26

标签: javascript google-chrome-extension

我试图让我的Chrome扩展程序在用户http://google.com/上时弹出警告,然后点击扩展程序图标。

我有以下清单:

{
   "manifest_version": 2,

   "name":  "One Megahurt",
   "version": "0.1",

   "permissions": [
       "activeTab"
    ],

   "background": {
       "scripts": ["bg.js"],
       "persistent": false
    },

    "browser_action": {
        "default_icon": "icon.png"
    } 
}

这是bg.js:

chrome.browserAction.onClicked.addListener(function(tab) {
     alert('Test!');
})

此代码允许在任何网站上弹出提醒,因为我对这些网站没有任何限制。我尝试使用

if(tab.url === "https://google.com/")

在第一行和第二行之间,但是没有用。

我不确定我是否应该使用后台脚本而不是内容脚本。我查看了Google的示例,并尝试使用URL"中的" Page动作实现,但这对我来说也不起作用。

任何帮助将不胜感激。我应该注意,我并不真正关心网址的具体问题--Google.com只是一个例子。我想学习将其用于其他项目和网站。

编辑:向权限添加网址并不会限制警报弹出的网站。

2 个答案:

答案 0 :(得分:1)

根据Felix King的建议,我最终使用了针对我的解决方案的页面操作。回想起来,这是最好的解决方案,因为它不会在每个页面上加载扩展并导致浏览器速度下降(据我所知)。

除了向清单中的权限添加域外,还要将以下代码添加到background.js

// When the extension is installed or upgraded ...
chrome.runtime.onInstalled.addListener(function() {
  // Replace all rules ...
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    // With a new rule ...
    chrome.declarativeContent.onPageChanged.addRules([
      {
        // That fires when a page's URL matches one of the following ...
        conditions: [
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl: { urlMatches: 'http://google.com/' }, // use https if necessary or add another line to match for both
          }),
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl: { urlMatches: 'http://facebook.com/*' },
          }) // continue with more urls if needed
        ]
        // And shows the extension's page action.
        actions: [ new chrome.declarativeContent.ShowPageAction()]
      }
    ]);
  });
});

chrome.pageAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, { file: "script.js" });
});

要在manifest.js中添加的关键部分是:

"background": {
  "scripts": ["res/background.js"],
  "persistent": false
}

&安培;

"permissions": [
        "declarativeContent", "tabs", "activeTab", "http://google.com", "http://facebook.com/*"
    ]

答案 1 :(得分:0)

我对此没有多少经验,但看看我见过的示例清单,他们通常会在权限下拥有一个域列表。我敢打赌,如果你使用:

"permissions": ["http://www.google.com/", "https://www.google.com/", https://google.com, https://google.com],

它只会在允许的页面上运行代码。

来自的示例: http://developer.chrome.com/extensions/overview

更详细的信息: http://developer.chrome.com/extensions/declare_permissions