默认弹出窗口匹配URL

时间:2015-03-03 02:19:13

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

我测试了一个在线调查应用程序。我的应用程序中有数百个文本框,我必须输入一些数字用于测试目的。因此,我正在创建Chrome扩展程序以填写表单。我做到了,它几乎按照我的预期工作 - 除了一个小问题。

的manifest.json:

{
  "name": "FillForm",
  "version": "1.0",
  "manifest_version": 2,
  "description": "FillForm",
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": ["activeTab"]
}

每当我点击browserAction按钮时 - 它会打开popup.html,其中有一个文本框。如果我在那里输入1,它将为我的应用程序中的所有文本框输入1 - 这就是我想要的。

现在我只想为我的应用程序打开popup.html,即匹配网址http://example.com,因为我不想在任何其他网页中输入任何信息。

我怎样才能实现这个目标?

2 个答案:

答案 0 :(得分:2)

这是Page Actions的确切目的:提供仅在某些网站上可见的按钮。

首先,将您的browser_action密钥更改为page_action

  "page_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },

您需要自己决定何时展示它。使用declarativeContent API,您可以提供一组规则,说明您何时想要这样做。

添加declarativeContent权限:

  "permissions": ["activeTab", "declarativeContent"]

然后,添加一个将管理规则的background script。由于您不需要后台脚本始终处于活动状态,因此它非常适合Event Page

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

现在,事件页面代码:

// eventPage.js

// This only needs to run on install/update, rules are remembered
chrome.runtime.onInstalled.addListener(function(details) {
  var rule1 = {
    conditions: [
      new chrome.declarativeContent.PageStateMatcher({
        // See declarativeContent docs for more options
        pageUrl: { hostEquals: 'www.example.com' }
      })
    ],
    actions: [ new chrome.declarativeContent.ShowPageAction() ]
  };

  // Remove existing rules, if any
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {  
    // Then, add our rule1
    chrome.declarativeContent.onPageChanged.addRules([rule1]);
  });
});

答案 1 :(得分:1)

我会在匹配指定网址的网页中注入popup.html的内容。

  • 这简化了填写表单的操作(您无需点击扩展图标)
  • 它不会使您的浏览器出现额外的图标

为此,请先修改清单:

{
  "name": "FillForm",
  "version": "1.0",
  "manifest_version": 2,
  "description": "FillForm",
  "content_scripts": [
  {
    "matches": ["http://*.xxx.com/*"], // put your URL pattern here
    "js": ["popup_inject.js"]
  }
],
  "web_accessible_resources": ["popup.html"]
  "permissions": ["activeTab"]
}

popup_inject.js

var iframe  = document.createElement ("iframe");
iframe.src  = chrome.extension.getURL ("popup.html");
iframe.style.position="absolute";
iframe.style.top="10px";
iframe.style.right="10px";
iframe.style.border="solid 1px #aaa";

document.querySelector("body").appendChild(iframe);