紧跟previous post之后,我现在尝试创建一个Chrome扩展程序版本,该版本未在content_scripts:
文件中指定matches:
或manifest.json
;而是通过选项页面触发的en事件以编程方式注入内容脚本,该事件提示用户授予执行内容脚本的可选权限。基本原理是能够使扩展程序在具有不同顶级域名的主机的页面上运行(有关详细信息,请参见上一篇文章)。我已经读过documentation并试图将点连接起来,但我还不太明白。
下面是我到目前为止创建的演示版本。我设法处理了可选的权限请求,并显示了授予该请求的用户提示(显示警报“ granted!”)。但是,当我尝试在background.js
中使消息侦听器执行脚本content.js
时(通过删除/ *注释掉的代码* /在那里),我得到了错误消息
未经检查的runtime.lastError:无法访问url的内容 “ chrome-extension:// [blah] /options.html”。扩展清单必须 请求访问此主机的权限。
任何关于我在这里错过的内容的指导都将受到欢迎。
我还有第二个问题:由于我在content.js
脚本中使用jQuery,因此我是否还必须执行jQuery.js
文件以响应授予的权限,如果是,应该执行通过添加另一个单独的chrome.tabs.executeScript()
命令来完成?
manifest.json:
{
"manifest_version": 2,
"name": "My Extension",
"version": "1",
"description": "Demo extension",
"options_page":"options.html",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"optional_permissions":["tabs","https://*/*"],
"permissions": ["activeTab","storage"]
}
options.html:
<html>
<head>
<style>
button#permreq{font-size:2em;}
</style>
</head>
<body>
<button id="permreq">Click this button to enable My Extension</button>
<script src="jQuery.js"></script>
<script src="options.js"></script>
</body>
</html>
options.js:
jQuery(function($){
$(document).ready(function(){
$("button#permreq").click(function(){
chrome.permissions.request({
permissions: ['tabs'],
origins: ["https://*/*"]
}, function(granted) {
if (granted) {
chrome.runtime.sendMessage("granted");
} else {
alert("denied");
}
});
});
});
});
background.js:
chrome.runtime.onMessage.addListener(
function(message, callback) {
if (message == "granted"){
/*chrome.tabs.executeScript({
file: "content.js"
});*/
alert("granted!");//no errors as long as above code is commented out
} else{
alert("denied");
}
});