据我所知,每次重新加载扩展时,它都会获得一个带有新UUID的新moz-extension://
URL。这使我无法预先知道我想与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,在重新安装之间不会保留,因此在使用默认值时,无法告诉web-ext
通过-u
打开扩展页面。
这就是this helpful documentation page的用武之地。它提到了extensions.webextensions.keepUuidOnUninstall
中的about:config
选项。因此必须创建一个配置文件,将此选项设置为true
,并与web-ext
-p
选项一起使用。
我遇到的下一个问题是页面无法打开。显然Firefox试图在安装扩展程序之前打开页面。但web-ext
有一个--pre-install
选项,使扩展(及其页面)在开始时可用,所以当它启用时,页面打开。警告1是使用--pre-install
要求扩展具有必须在ID中设置的manifest.json
(这不是由Firefox生成的提及的UUID)。警告2,--pre-install
禁用文件更改时的扩展自动重新加载。
所以我的最终解决方案是:
firefox --manageProfiles
,创建一个单独的配置文件来测试我的扩展extensions.webextensions.keepUuidOnUninstall
about:config
标志(不用web-ext
或--keep-profile-changes
这样做)manifest.json
中添加扩展名的ID:
"applications": {
"gecko": {
"id": "[email protected]"
}
}
web-ext run -p <testing profile name> --pre-install -u moz-extension://<extension UUID>/path/to/extension/page.html
这将启动Firefox并临时安装您的扩展程序并打开所需的页面。
如果您知道更好的解决方案(例如,不禁用自动重新加载的解决方案),那么您的答案非常受欢迎。