Firefox WebExtensions中的自定义协议



我有一个旧的Firefox插件,它注册了一个自定义协议"linkpassword://">

由于Firefox版本57的插件停止工作,我不得不将完整的插件重写为Firefox WebExtension。

我的问题是,我找不到为协议"linkpassword://"注册处理程序的方法。

Firefox WebExtensions的manifest.json中的"protocol_handlers"部分可用于注册通用或自定义协议处理程序。

但从MDN WebExtensions protocol_handlers的文档来看,似乎必须在自定义协议处理程序前面加上web+somethingext+something

您可以通过使用扩展中的页面作为"uriTemplate"来处理扩展中的链接,如下所示:

"protocol_handlers": [
{
"protocol"   : "ext+linkpassword",
"name"       : "Password Link",
"uriTemplate": "html/processLink.html#login=%s"
}
],

当前,您无法使用WebExtensions注册linkpassword://的处理程序。

就目前而言,仅允许使用指定的白名单协议而不带前缀(bitcoingeogopherimircircsmagnetmailtommsnewsnntpsipsmssmstosshtelurnwebcalwtaixmpp中的一个)。任何其他自定义名称都需要以web+ext+为前缀。请参阅protocol_handlers参考。

有了前缀,你可以这样注册:

"protocol_handlers": [
{
"protocol"   : "ext+linkpassword",
"name"       : "Password Link",
"uriTemplate": "html/processLink.html#login=%s"
}
],

然后,您必须在链接中使用ext+linkpassword://来触发处理程序。

虽然在WebExtensions的当前状态下,您无法为任意协议(如linkpassword://)设置处理程序,但它可能会在某个时候发生变化,因为有一些关于它的讨论,但很难说什么时候会发生这种情况。在真正的解决方案可用之前,作为一个临时解决方案,您可以使用WebExtension JS代码在网页上将linkpassword://修补到ext+linkpassword://,这样即使页面上的链接是用linkpassword://模式加载的,处理程序仍然会被触发。

最新更新