我有一个旧的Firefox插件,它注册了一个自定义协议"linkpassword://">
由于Firefox版本57的插件停止工作,我不得不将完整的插件重写为Firefox WebExtension。
我的问题是,我找不到为协议"linkpassword://"注册处理程序的方法。
Firefox WebExtensions的manifest.json中的"protocol_handlers"部分可用于注册通用或自定义协议处理程序。
但从MDN WebExtensions protocol_handlers的文档来看,似乎必须在自定义协议处理程序前面加上web+something或ext+something。
您可以通过使用扩展中的页面作为"uriTemplate"来处理扩展中的链接,如下所示:
"protocol_handlers": [
{
"protocol" : "ext+linkpassword",
"name" : "Password Link",
"uriTemplate": "html/processLink.html#login=%s"
}
],
当前,您无法使用WebExtensions注册linkpassword://
的处理程序。
就目前而言,仅允许使用指定的白名单协议而不带前缀(bitcoin
、geo
、gopher
、im
、irc
、ircs
、magnet
、mailto
、mms
、news
、nntp
、sip
、sms
、smsto
、ssh
、tel
、urn
、webcal
、wtai
、xmpp
中的一个)。任何其他自定义名称都需要以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://
模式加载的,处理程序仍然会被触发。