我写了一个谷歌浏览器扩展。没关系,现在可以使用,但是我希望扩展只能在两个域中使用,因为它仅为这两个网站编写,对其他网站没用。只有context menu
。目前它甚至没有弹出窗口,或右上角的动作按钮(默认为隐藏)。如何实现这一目标?如何仅允许扩展两个域名?
我现在manifest.json的:
{
"manifest_version": 2,
"background": {
"scripts": [ "scripts/jquery.min.js", "scripts/background.js" ]
},
"name": "Export Entries",
"description": "some descriptions here",
"version": "1.0",
"icons": {
"16": "images/logo.png",
"48": "images/logo.png",
"128": "images/logo.png"
},
"permissions": [ "downloads", "tabs", "contextMenus", "http://my-own-domain-accessed-via-ajax-for-creating-some-files-there.com/*" ],
"content_scripts": [
{
"matches": [ "*://allowed-domain1.com/*", "*://allowed-domain2.com/*" ],
"css" : [ "styles/style.css" ],
"js" : [ "scripts/jquery.min.js", "scripts/popup.js", "scripts/background.js" ],
"run_at": "document_end"
}
],
"web_accessible_resources": [
"images/logo.png"
]
}
据我了解分机不能禁用绝对,其proccess将在后台再次运行。但这不是问题。我只是不想在其他网站上显示上下文菜单项。
background.js创建上下文菜单项,并处理其Click事件:
function exportEntries(info, tab) {
if(info['linkUrl'].indexOf('domain1.com/user/') > -1) {
var user = info['linkUrl'].substr('27');
} else {
var user = null; // export all entries from this topic
}
$.ajax({
url: 'http://my-own-domain-which-creates-the-file.eu/exportEntries/create.php',
method: 'POST',
data: { topic: tab.url, user: user }
}).done(function (url) {
forceDownload(url);
});
}
function forceDownload(url) {
var filename = url.replace(/^.*\/|\.[^.]*$/g, '');
chrome.downloads.download(
{url: url, saveAs: true}, // options array
function(id) {
// callback function
}
);
};
document.addEventListener('DOMContentLoaded', function() {
chrome.contextMenus.create({
'title': 'Export Entries',
'contexts': ['link'],
'onclick': function(info, tab) {
exportEntries(info, tab);
}
});
});
create.php是我自己的域名。它只是获取当前页面的URL和用户的昵称。然后导出给定用户的给定主题(即页面URL)的所有条目,创建一个文件(.txt,.pdf等)并返回用于下载文件的url。
popup.html,popup.js,css文件和其他的东西不用于现在。
你能证明你的代码的相关部分:
要在创建使用
chrome.contextMenus.create
上下文菜单限制上下文菜单项向某些域,pecify的documentUrlPatterns
关键?我对'scripts/background.js'的内容非常好奇,因为你将它包含了两次(作为后台脚本和内容脚本)。我怀疑其中的一个(甚至是所有内容脚本)都放错了位置。只要结构和Chrome API调用仍可见('popup.js','background.js'),就可以去除应用程序逻辑。 –@RobW,你说得对,我从'content_scripts'中删除了'js',它又重新开始工作。我只是有其他的想法来扩展扩展(添加历史记录等弹出窗口),清单并没有从不必要的东西中清除。你有权限的建议吗? – enenen
是的,我已经键入了一个答案,但因为我没有发布它,因为它假定你采取了某种方法。我不想玩猜谜游戏,那么你可以分享创建上下文菜单的代码吗? (你使用'contextmenu'事件或'chrome.contextMenus' API?如果你点击上下文菜单项,会发生什么?) –