我有一个旧的插件到Firefox注册了自定义协议“linkpassword://”
自Firefox版本57以来,插件停止运行,我必须将完整的插件重写为Firefox WebExtenstion。
我的问题是我找不到注册协议“linkpassword://”的处理程序的方法。
答案 0 :(得分:2)
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"
}
],
答案 1 :(得分:1)
目前,您无法使用WebExtensions为linkpassword://
注册处理程序。
现在只允许使用指定的列入白名单的协议,而不使用前缀(bitcoin
,geo
,gopher
,im
,{{1}之一},irc
,ircs
,magnet
,mailto
,mms
,news
,nntp
,sip
, sms
,smsto
,ssh
,tel
,urn
,webcal
,wtai
)。任何其他自定义名称都需要以xmpp
或web+
作为前缀。请参阅protocol_handlers参考。
使用前缀,您可以这样注册:
ext+
然后,您必须在链接中使用"protocol_handlers": [
{
"protocol" : "ext+linkpassword",
"name" : "Password Link",
"uriTemplate": "html/processLink.html#login=%s"
}
],
来触发处理程序。
虽然对于WebExtensions的当前状态,您无法为任意协议设置处理程序,例如ext+linkpassword://
,但它可能会在某个时候发生变化,因为它有some discussions个但是很难说什么时候会这样。作为真正的解决方案可用之前的临时解决方法,您可以使用WebExtension JS代码在网页上将linkpassword://
修补到linkpassword://
,这样即使页面上的链接加载了,处理程序仍会被触发ext+linkpassword://
架构。