Chrome Firefox上的Manifest v3后台脚本/服务工人

tag5nh1u  于 2023-01-28  发布在  Go
关注(0)|答案(2)|浏览(404)

我正在尝试将我的浏览器扩展(我希望在Chrome和Firefox上工作)从manifest v2迁移到v3。
然而,我得到的关于background部分的信息相互矛盾。我做了大量关于google和堆栈溢出的研究,似乎没有人同意任何事情。而且,大多数信息似乎都过时了。在我找到的最好的来源中,很多地方提到它应该迁移到service_workerexample),但看起来Firefox仍然应该使用scripts来代替(source)。
但无论我做什么,我都会得到错误。如果我只使用服务工人:

"background": {
    "type": "module", // tried both with and without this option
    "service_worker": "background.ts"
}

来自parcel的build命令很好用(下面似乎使用了parcel/transformer-webextension),但是web-ext灾难性地失败了:

WebExtError: installTemporaryAddon: Error:
Error: Could not install add-on at '...':
Error: background.service_worker is currently disabled

即使我提供了--firefox-preview标志,它应该可以修复这个问题。
this well-written tutorial声明Firefox在V3中继续使用scripts,只是反对persisent标志(您可以删除或设置为false),这是有道理的,因为我没有使用它。

"background": {
    "scripts": ["background.ts"],
    "persistent": false // `persistent` must either be false or omited; I tried both
}

事实上,这正是Firefox官方文档声称V3应该支持的。
但是包裹抱怨^^^ Missing property service\_worker

好吧,我们两个都试试:

"background": {
    "type": "module",
    "service_worker": "background.ts",
    "scripts": ["background.ts"]
},

但包裹并不高兴,用Invalid Web Extension manifest

所以无论我怎么努力,我都无法让parcelweb-ext同时快乐。
看起来Chrome想要一个东西,Firefox想要另一个,但无论我怎么尝试,我甚至不能运行我的扩展在 * 两个 * 浏览器.所以不仅看起来我不能有一个V3扩展两个浏览器-我不能有一个V3扩展在所有如果我想同时使用parcelweb-ext(这是必不可少的afaik).
我特别担心,因为根据to official chrome sources,清单V3是从 * 现在 * 开始的“特色徽章的先决条件“,V2将在6月删除。
因此,如果我现在已经因为没有使用V3而受到惩罚,并且只有不到6个月的时间来弄清楚如何使用V3,而现有的工具似乎都不支持这个版本,那么我一定错过了什么...
注意:这些是我用来运行parcel和web-ext的命令:

"watch": "parcel watch src/manifest.json --dist-dir distribution --no-cache --no-hmr",
        "start": "web-ext run --firefox-preview"

这些是我正在使用的版本,都是NPM上的最新版本

"parcel": "^2.8.2",
        "web-ext": "^7.4.0",
pexxcrt2

pexxcrt21#

我在2022年4月查看了包裹捆绑器的更改历史和Manifest V3支持was added,之后他们实现了Manifest V3,其中不包括Chrome添加的Service Workers来替换背景页面。
时至今日,Mozilla在他们对Manifest v3的愿景上只提供了high level details,这使得Firefox的实现只完成了一半,而且(值得注意的是)在包括后台脚本时与Chrome的实现截然不同。
这给Parcel带来了几个问题,因为他们的捆绑包依赖于一致的清单标准来生成一个可以跨浏览器使用的单一可分发文件。你提出的问题是正确的,Parcel只支持Chrome版本的清单v3。更大的问题是,在可预见的未来,Firefox将需要一个不同于其他浏览器的清单文件。并且parcel-bundler仅支持必须命名为“manifest.json”的单个清单文件。
有一个open pull request来增加对多个使用不同名称的清单文件的支持,但是它还没有被合并(在写这篇文章的时候),我不确定这个解决方案是否合适,因为这些修改没有解决这个特定的问题。
我在parcel-bundler repo中使用opened a bug来记录与Firefox Manifest V3的不兼容性,但目前还不可能为Firefox构建一个包含使用Parcel的后台脚本的Manifest V3扩展。

zxlwwiss

zxlwwiss2#

只是面临着同样的问题:

  • Chrome对background.scripts并不满意,坚持使用background.service_worker
  • Firefox不支持background.service_worker,需要background.scripts

Manifest v3是由Google开发的,所以看起来Firefox团队还没有完全实现它。Firefox 109是第一个“支持”manifest v3的版本(1月17日发布)。
我很快就在bugzilla上找到了12这两张票。看起来不会很快修复!
更糟糕的是,Chrome不再接受manifest v2的新扩展!这可能是Firefox团队决定启用Manifest v3扩展的原因,即使没有服务人员的支持。
web-ext也是由Mozilla开发的,只是有这样的内容:

"background": {
    "scripts": ["background.js"]
},

应该允许您(没有跨浏览器兼容性!)将其发布到Firefox Marketplace并使用web-ext工具(它还有非常冗长内置lint子命令./node_modules/.bin/web-ext lint

相关问题