我正在尝试从后台脚本将一些代码注入到选定的选项卡上下文中,但我在权限方面遇到了一些问题。
manifest.json
{
"manifest_version": 2,
"name": "prova",
"version": "1.0",
"permissions": [
"activeTab"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [
{
"matches": ["https://*"],
"css": ["mystyles.css"],
"js": ["myscript.js"]
}
]
}
背景.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
chrome.tabs.executeScript(null,{code:"console.log('Not done!');"});
sendResponse({});
});
我的脚本.js
chrome.runtime.sendMessage({}, function(response) {
console.log("Done!");
});
这是后台控制台中出现的错误:
未选中的运行时。上次运行选项卡时出错。执行脚本:无法 访问页面的内容。扩展清单必须请求 访问相应主机的权限。
我真的很感谢每一个建议。 谢谢吨。
从程序化注入部分:
若要将代码插入页面,扩展必须具有页面的跨源权限。它还必须能够使用 chrome.tabs 模块。您可以使用清单文件的权限字段获取这两种权限。
这意味着您需要为要运行代码的主机申请许可证。 因此,manifest.json
中的permissions
部分应如下所示:
"permissions": [
"tabs",
"http://*.example.com/",
]
查看主机匹配模式。
编辑 1:
我还注意到您使用content-script
和programmatic injection
.这两种在选项卡中运行代码的方法几乎可以完成相同的工作,但方式不同。
- 清单中的
content_script
部分有助于在与主机模式匹配的每个页面上运行脚本。 - 编程注入 (PI( 还有助于运行代码(文件或字符串(。但主机权限应通过清单中的第
permissions
节进行设置。PI 在脚本需要很少运行时使用,而不是在每个页面上运行。