据我了解,每次重新加载扩展时,它都会获得一个新的moz-extension://
URL,其中包含一个新的UUID。这使得无法提前知道我想与web-ext run -u
一起使用的扩展页面 URL。这使web-ext
对我来说几乎毫无价值,因为我必须(手动)打开我需要运行测试的页面。如果我事先知道 URL,我可以将其传递给web-ext
并完全自动地执行所有操作,并且使用无头 FF。有没有办法解决这个问题?
经过一番摆弄,我终于设法web-ext
浏览器启动时打开一个带有moz-extension
架构的页面。
使用扩展上下文(并正确测试页面)而不是作为普通file://
打开此页面的唯一方法是使用moz-extension://<internal UUID>/path/to/extension/page/from/extension/root
类型 URI 访问它。
问题是,作为临时扩展,它始终具有不同的UUID,该UUID在重新安装之间不会保留,因此在使用默认值时无法告诉web-ext
通过-u
打开扩展页面。
这就是这个有用的文档页面的用武之地。它提到了about:config
中正是这样做的extensions.webextensions.keepUuidOnUninstall
选项。因此,必须创建一个配置文件,将此选项设置为true
,并与web-ext
-p
选项一起使用。
我遇到的下一个问题是页面将静默地无法打开。显然,Firefox 试图在安装扩展程序之前打开该页面。但是web-ext
有一个--pre-install
选项,使扩展(及其页面)在开始时可用,因此当启用它时,页面确实会打开。警告 1 是,使用--pre-install
要求扩展名具有必须在manifest.json
中设置的 ID(这不是 Firefox 生成的 UUID)。警告 2,--pre-install
禁用文件更改时扩展名自动重新加载。
所以我的最终解决方案是:
-
使用
firefox --manageProfiles
,创建一个单独的配置文件来测试我的扩展 -
继续设置并保存
extensions.webextensions.keepUuidOnUninstall
about:config
标志(无需web-ext
或--keep-profile-changes
否则执行此操作) -
在
manifest.json
中添加扩展的 id:"applications": { "gecko": { "id": "addon@example.com" } }
-
跑
web-ext run -p <testing profile name> --pre-install -u moz-extension://<extension UUID>/path/to/extension/page.html
这会从临时安装扩展程序开始 Firefox 并打开所需的页面。
如果您知道更好的解决方案(例如不禁用自动重新加载的解决方案),您的回答非常受欢迎。