Firefox WebExtensions中的自定义协议

时间:2017-11-20 20:22:49

标签: firefox-addon firefox-webextensions

我有一个旧的插件到Firefox注册了自定义协议“linkpassword://”

自Firefox版本57以来,插件停止运行,我必须将完整的插件重写为Firefox WebExtenstion。

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

2 个答案:

答案 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://注册处理程序。

现在只允许使用指定的列入白名单的协议,而不使用前缀(bitcoingeogopherim,{{1}之一},ircircsmagnetmailtommsnewsnntpsipsmssmstosshtelurnwebcalwtai)。任何其他自定义名称都需要以xmppweb+作为前缀。请参阅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://架构。