如何使用Manifest v3在Firefox中要求启用权限?

8

截至1月17日,Firefox现在在Firefox 109.0中支持Manifest v3。

我正在测试使用Manifest v3的插件,并且需要访问reddit.com上的变量。

我想要将“访问*://reddit.com域中站点的数据”权限设置为必需,因为如果没有该扩展程序将无法工作。

为了使用户不必从权限选项卡中显式地打开权限,需要做些什么才能使其不显示为可选?

enter image description here

我希望它显示为所需的,类似于这个图片(source):

enter image description here

这是一个简化版本的示例清单文件,显示权限为可选项。
{
    "manifest_version": 3,
    "name": "Example",
    "description": "Example",
    "version": "3.16.1",
    "content_scripts": [
        {
            "run_at": "document_idle",
            "matches": ["*://*.reddit.com/"],
            "js": ["script.js"]
        }
    ]
}

我尝试添加了"permissions": ["https://*.reddit.com/*"],但它仍然显示为可选。

我还尝试了"permissions": ["*://reddit.com"]"host_permissions": ["*://reddit.com"],但没有任何东西使其成为必需的。

我有一个Chrome扩展程序,它使用相同的v3清单文件正常工作。


1
这可能是Firefox的一个bug,或者他们误解了Chrome关于ManifestV3的计划,即允许用户在安装扩展时选择立即授予所需的主机权限还是将其设置为可选。这个功能在Chrome中尚未实现。 - wOxxOm
1个回答

2
我找到的唯一解决方案是设置可选权限。 https://developer.chrome.com/docs/extensions/reference/permissions/ 我将权限设置本身添加到监听器中。当然,我会先检查是否已存在这些权限。
    browser.action.onClicked.addListener((tab: Tab) => {
      browser.permissions.request({
        origins: ['*://*.reddit.com/']
      })
    });

1
警告:如果您在manifest.json中有action.default_popup,则browser.action.onClicked永远不会被调用。希望我能为其他人节省时间,不必在stackoverflow和MDN上徘徊,试图弄清楚为什么browser.action.onClicked从未被调用! - maxgalbu
在哪里我应该复制粘贴你的代码?manifest.json吗? - Alex01
@Alex01 你需要将它添加到背景脚本中 - DarekFront

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接