如何在不用户单击 WebExtension v3 的情况下运行content_script

How to run a content_script without user click on WebExtension v3

提问人:paws 提问时间:10/25/2023 最后编辑:paws 更新时间:10/25/2023 访问量:56

问:

我是 WebExtensions 的新手,并尝试将一个名为 borderify 的最小示例从 v2 移植到 v3。

我尝试了设置 的最小步骤,但我很快发现这会破坏自动运行的内容脚本。manifest.jsonmanifest_version: 3

manifest.json

{
  "manifest_version": 3,
  "name": "Borderify",
  "content_scripts": [
    {
      "matches": ["*://*.mozilla.org/*"],
      "js": ["borderify.js"]
    }
  ],
  ...
}

borderify.js 又名内容脚本

document.body.style.border = "5px solid red";

v2 作品

v3 损坏

在 v3 上,似乎有必要手动单击浏览器 UI 中的扩展图标才能实际运行content_scripts。这似乎是一种回归——我错过了什么?

如何让内容脚本自动加载旧的 v2 方式?如果可能的话,最好避免需要权限。这种行为在 v3 中可能吗?

火狐浏览器 119.0、macOS 13.6

javascript firefox-addon web扩展

评论

0赞 paws 10/25/2023
谢谢,我一直在看这些文档,但它们没有直接解决的是 v3 现在似乎需要的新权限选择加入。我将在这里更新答案。

答:

0赞 paws 10/25/2023 #1

TIL 似乎有一个新的(强制性的?)权限授予具有 v3 扩展的流程。

安装 v3 扩展后,当浏览到与其content_script匹配的域时,扩展图标将得到一个点:matches

Badge

用户必须在单独的点击中手动激活扩展程序:

Manual opt-in

我可以理解它的论点,但它仍然为非技术用户增加了烦人的摩擦。

我希望找到是否有办法避免这个额外的手动步骤,例如使用或其他一些技巧。host_permissions

0赞 Mehmet Baker 10/25/2023 #2

是的,你是对的。显然,他们已经改变了行为。除非用户明确允许为 中的指定主机运行扩展,否则内容脚本将不会运行。host_permissions

Mozilla Developer Network 的 Content Scripts 页面上有一条注释:

注意:仅当扩展被授予域的主机权限时,才会执行内容脚本。

但是,无论授予的权限如何,都无法访问受限制的域

从 Manifest V3 开始,安装时不会自动授予主机权限。安装扩展程序后,用户可以选择加入或退出主机权限。

评论

0赞 paws 10/25/2023
根据我最初使用 web-ext 的经验,似乎在 manifest.json 中指定并不能自动处理添加 perms。(不确定已发布的扩展是否不同。无论如何,对于本地开发人员,我仍然必须在单独的单击中手动批准它们。很烦人 - 我在 repo 上打开了一个问题;希望有诀窍!host_permissions
1赞 Mehmet Baker 10/25/2023
@paws我使用web-ext的参数。dir 最初可以为空。但是,一旦允许扩展,后续运行将在开发环境中自动执行内容脚本。--firefox-profile=<absolute directory path>
0赞 paws 10/25/2023
谢谢,这听起来很有希望。出于某种原因,即使我添加和 ,当我调用时,我仍然必须手动重新允许扩展权限🤷,我在目录中看到配置文件,所以至少是这样。我会继续查看 web-ext 源代码并尝试!谢谢你的提示--firefox-profile=...--keep-profile-changesweb-ext run
1赞 paws 10/25/2023
刚刚让它工作。我了解到设置在里面很重要。一旦我这样做了并使用它,它就会在后续运行中尊重权限。谢天谢地。browser_specific_settings.gecko.idmanifest.jsonweb-ext run --firefox-profile=... --keep-profile-changes