jas*_*ram 3 google-chrome-extension chrome-extension-manifest-v3
我正在将功能正常的浏览器扩展迁移到清单 v3。问题:我希望仅在单击浏览器扩展图标时加载内容脚本。但是,脚本始终会加载。当我尝试上传到 chrome 商店时,我收到以下消息,这是我想避免的:
由于主机权限的原因,您的扩展程序可能需要深入审查,这将延迟发布。
我怀疑这与“行动”有关,但我不知道如何解决这个问题。这是清单:
{
"manifest_version": 3,
"name": "__MSG_extName__",
"description": "__MSG_extDescription__",
"key": "...",
"version": "1.0.0",
"icons": { ... },
"background": {
"service_worker": "/background.js"
},
"permissions": [
"storage"
],
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"/content.js"
]
}
],
"web_accessible_resources": [
{
"resources": [
"/assets/*",
"/options.html"
],
"matches": [
"<all_urls>"
]
}
],
"options_page": "options.html",
"action": {}
}
Run Code Online (Sandbox Code Playgroud)
最后一点:我认为我需要activeTab
许可。但同样,我的问题是我想最小化所需的权限。
提前致谢!
我最终想通了。基本上,我必须删除“content_scripts”部分。相反,我需要使用操作处理程序显式注入内容脚本。我错误地认为我可以使用正确的权限限制 content_scripts 部分。
为此,我必须设置 activeTab 和脚本权限,这里是新权限:
"permissions": [
"storage",
"activeTab",
"scripting"
],
Run Code Online (Sandbox Code Playgroud)
我的 Service Worker (background.js) 中已经有一个操作处理程序,现在如下所示:
chrome.action.onClicked.addListener(async (tab) => {
await chrome.scripting.executeScript({
target: { tabId: tab.id, allFrames: true },
files: ["content.js"],
});
// Do other stuff...
});
Run Code Online (Sandbox Code Playgroud)
我希望这个答案能帮助某人、某处!
归档时间: |
|
查看次数: |
9794 次 |
最近记录: |