我试图从后台脚本向选定的标签上下文中注入一些代码,但我对权限有一些问题。
的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"]
}
]
}
background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
chrome.tabs.executeScript(null,{code:"console.log('Not done!');"});
sendResponse({});
});
myscript.js
chrome.runtime.sendMessage({}, function(response) {
console.log("Done!");
});
错误出现在后台控制台中:
运行tabs.executeScript时未经检查的runtime.lastError:不能 访问页面的内容。扩展清单必须要求 允许访问相应的主机。
我真的很感激每一个建议。 非常感谢。
答案 0 :(得分:5)
要将代码插入页面,您的扩展程序必须具有该页面的跨域权限。它还必须能够使用chrome.tabs模块。您可以使用清单文件的权限字段获得这两种权限。
这意味着您需要为要运行代码的主机请求许可。
因此,permissions
中的manifest.json
部分应该像:
"permissions": [
"tabs",
"http://*.example.com/",
]
编辑1:
我还注意到您使用了content-script
和programmatic injection
。这两种在选项卡中运行代码的方法几乎完全相同,但方式不同。
content_script
部分有助于在与主机模式匹配的每个页面上运行脚本。 permissions
部分设置主机权限。 PI在脚本需要很少运行时使用,而不是在每个页面上运行。