Navigator.registerProtocolHandler()

Secure context
This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Navigator 方法 registerProtocolHandler() 让web站点为自身注册能用于打开或处理特定URL schemes(aka protocols)的功能。

举个例子,这个API可以让电子邮件站点打开 mailto: 类的URL,或者让VoIP站点打开 tel: 类的URL。

语法

navigator.registerProtocolHandler(scheme, url, title);

参数

scheme
一个包含站点希望处理的协议的字符串。例如,你可以通过传入 "sms" 来注册处理SMS文本信息链接。
url
处理器的URL,string类型。这个字符串应该包含一个"%s"的占位符,其会被将要受理的文档的 escaped 链接所替换。这个链接(译者按:指将要受理的文档的 escaped 链接,也就是替换占位符的字符串)可能是一个真实的URL,或者是一个电话号码,邮件地址之类的。
这个处理器的 URL 必须以 http 或者 https 协议标记作为开头,最好是 https ,以满足一些浏览器出于安全考虑的要求。
title
一个用户可理解的处理器标题。标题会展示给用户,例如弹出对话框“允许这个站点处理[scheme]链接吗?”或者在浏览器设置中列出注册的处理器时。

异常

  • 指定了一个非法的协议标记,例如一个浏览器自身的标记(https:about: 等)。
  • 处理器URL的 origin 与调用这个API的页面的 origin不匹配。
  • 浏览器要求这个函数由安全的上下文调用。
  • 浏览器要求处理器的URL使用 HTTPS 协议。
SecurityError
用户代理阻止了处理器的注册。这可能是由于:
SyntaxError
在指定的协议处理地址的字符串中缺失了 %s 占位符.

允许的协议标记

出于安全考虑,registerProtocolHandler() 严格限制了允许注册的协议标记。以 web+ 作为前缀的方式可以注册一个自定义的标记协议,至少要有5个字符的长度(包括 web+ 前缀),而且只能使用小写的ASCII字母作为名称。例如 web+burger ,如下面的示例所示。

除此之外,还可以使用下文所列的白名单中的协议标记:

  • bitcoin
  • geo
  • im
  • irc
  • ircs
  • magnet
  • mailto
  • mms
  • news
  • nntp
  • openpgp4fpr
  • sip
  • sms
  • smsto
  • ssh
  • tel
  • urn
  • webcal
  • wtai
  • xmpp

示例

如果你的web应用程序的地址是http://www.google.co.uk,你可以像这样注册一个作用于"web+burger"的处理器链接:

navigator.registerProtocolHandler("web+burger",
                                  "https://www.google.co.uk/?uri=%s",
                                  "Burger handler");

这就创建了一个处理器,其允许以web+burger://链接去将用户导向到你的web应用,并且将burger信息插入了到该处理器所指定的链接中(译者按:替换链接中"%s"的占位符).重申一下,这个脚本必须在同一域下运行(本例中就是指所有的google.co.uk下的页面)而且第二个参数必须是以"http"或者"https"协议标记作为开头的链接(本例中是https).

用户会被告知你的代码请求注册协议处理器,所以他们可以选择允许或者拒绝.如下面这个截图所示.

"Register a webmail service as mailto handler" 展示了如何从跨平台组件对象模块(XPCOM)中做到这一切.

规范

Specification Status Comment
HTML Living Standard
registerProtocolHandler()
Living Standard Initial definition

浏览器兼容性

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung Internet
registerProtocolHandlerChrome Full support 13
Notes
Full support 13
Notes
Notes Allowed schemes include mailto, mms, nntp, rtsp, and webcal. Custom protocols must be prefixed with web+.
Edge Full support ≤79
Notes
Full support ≤79
Notes
Notes Allowed schemes include mailto, mms, nntp, rtsp, and webcal. Custom protocols must be prefixed with web+.
Firefox Full support 3IE ? Opera Full support 11.6Safari ? WebView Android No support NoChrome Android Full support YesFirefox Android Full support 4Opera Android ? Safari iOS No support NoSamsung Internet Android Full support Yes
Secure context requiredChrome Full support 80Edge Full support ≤79Firefox Full support 62IE ? Opera ? Safari ? WebView Android No support NoChrome Android Full support 80Firefox Android Full support 62Opera Android ? Safari iOS No support NoSamsung Internet Android No support No

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
See implementation notes.
See implementation notes.

参见