我测试了一个在线调查应用程序。我的应用程序中有数百个文本框,我必须输入一些数字用于测试目的。因此,我正在创建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
,因为我不想在任何其他网页中输入任何信息。
我怎样才能实现这个目标?
答案 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);