--- title: Navigator.registerProtocolHandler() slug: Web/API/Navigator/registerProtocolHandler tags: - API - Navigator - URL protocols - URL schemes - registerProtocolHandler - 自定义 URL 协议 - 自定义 URL 方案 translation_of: Web/API/Navigator/registerProtocolHandler ---
{{domxref("Navigator")}} 的方法 registerProtocolHandler() 让 web 站点为自身注册用于打开或处理特定 URL 方案(又名协议)的能力。
举个例子,此API允许Web邮件站点打开 mailto: URL,或让 VoIP 站点打开 tel: URL。
navigator.registerProtocolHandler(scheme, url, title);
Note: 最近更新为 navigator.registerProtocolHandler(scheme, url), 但目前没有浏览器支持该版本。
scheme"sms" 来注册处理SMS文本信息链接。urlhttp 或者 https 协议标记作为开头,最好是 https ,以满足一些浏览器出于安全考虑的要求。title {{Obsolete_Inline}}Note: 出于欺骗的考虑,标题已从规范中删除,但当前所有的浏览器仍要求使用该标题。 建议始终设置标题,因为支持更新规范的浏览器很可能会向后兼容,并且仍接受标题(但不使用它)。
https:, about: 等)。SecurityErrorSyntaxError%s 占位符.出于安全考虑,registerProtocolHandler() 严格限制了允许注册的协议标记。以 web+ 作为前缀的方式可以注册一个自定义的标记协议,至少要有5个字符的长度(包括 web+ 前缀),而且只能使用小写的ASCII字母作为名称。例如 web+burger ,如下面的示例所示。
除此之外,还可以使用下文所列的白名单中的协议标记:
bitcoingeoimircircsmagnetmailtommsnewsnntpopenpgp4fprsipsmssmstosshtelurnwebcalwtaixmpp如果您的网站是 https://www.google.com/,则可以为其注册一个协议处理程序来处理 web+burger:链接,如下所示:
navigator.registerProtocolHandler("web+burger",
"https://www.google.com/?uri=%s",
"Burger handler");
这将创建一个处理程序,该处理程序允许使用 web+burger: 链接将用户发送到您的网站,并将访问的 Burger URL插入%s占位符。
该脚本必须从与处理程序URL相同的源运行(因此, https://www.google.com/ 上的任何页面),并且处理程序URL必须为 http 或 https。
将通知用户您的代码要求注册协议处理程序,以便他们可以决定是否允许它。有关 https://www.google.com/ 上的示例,请参见以下屏幕截图:

"Register a webmail service as mailto handler" 展示了如何从跨平台组件对象模块(XPCOM)中做到这一切.
| Specification | Status | Comment |
|---|---|---|
| {{SpecName('HTML WHATWG', 'webappapis.html#dom-navigator-registerprotocolhandler', 'registerProtocolHandler()')}} | {{Spec2('HTML WHATWG')}} | Initial definition |
{{Compat("api.Navigator.registerProtocolHandler")}}
registerProtocolHandler from XPCOM scope.