导航器:registerProtocolHandler() 方法

安全上下文: 此功能仅在 安全上下文 (HTTPS) 中可用,在一些或所有 支持的浏览器 中可用。

Navigator 方法 registerProtocolHandler() 允许网站注册它们打开或处理特定 URL 方案(也称为协议)的能力。

例如,此 API 允许 webmail 网站打开 mailto: URL,或 VoIP 网站打开 tel: URL。

要注册协议处理程序,网站会调用 registerProtocolHandler(),传入要注册的协议和模板 URL。

当用户激活使用注册协议的链接时,浏览器会将激活链接的 href 插入处理程序注册期间提供的 URL 模板中,并将当前页面导航到生成的 URL。

浏览器可能会询问用户是否确认他们希望页面被允许处理该协议,无论是注册协议时还是用户激活链接时。

语法

js
registerProtocolHandler(scheme, url)

参数

scheme

包含网站希望处理的协议方案的字符串。

这可能是一个自定义方案,在这种情况下,方案的名称

  • web+ 开头
  • web+ 前缀后至少包含一个字母
  • 仅包含小写 ASCII 字母。

否则,该方案必须是以下之一

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

包含处理程序 URL 的字符串。此 URL 必须包含 %s,作为将被替换为要处理的 转义 URL 的占位符。

处理程序 URL 必须使用 https 方案,并且必须与尝试注册处理程序的网页具有相同的 来源

返回值

无 (undefined).

异常

SecurityError DOMException

用户代理阻止了注册。这可能发生在以下情况下

  • 注册的方案(协议)无效,例如浏览器本身处理的方案(https:about: 等)
  • 处理程序 URL 的 来源 与调用此 API 的页面的来源不匹配。
  • 处理程序 URL 的方案不是 https
SyntaxError DOMException

处理程序 URL 中缺少 %s 占位符。

示例

注册 mailto 协议的处理程序

网页使用非 https 协议链接到资源的情况相当普遍。一个例子是 mailto: 协议。网页作者可以使用 mailto 链接,当他们希望提供一种方便的方式让用户直接从网页发送电子邮件时

html
<a href="mailto:[email protected]">Web Master</a>

当激活链接时,浏览器应启动用于处理电子邮件的默认桌面应用程序。您可以将此视为基于桌面的协议处理程序。

基于 Web 的协议处理程序允许基于 Web 的应用程序也参与该过程。mail.example.org 上的电子邮件 Web 应用程序可以使用类似以下代码注册以处理 mailto 链接

js
navigator.registerProtocolHandler("mailto", "https://mail.example.org/?to=%s");

此后,当用户在任何网站上单击 mailto 链接时,浏览器将(可能在询问浏览器确认后)导航到 https://mail.example.org/?to=mailto:[email protected]。此页面可以解析 URL 参数以提取地址,并使用它来初始化电子邮件。

注册自定义协议的处理程序

在此示例中,页面使用类似以下代码注册 web+burger 协议的处理程序

js
navigator.registerProtocolHandler(
  "web+burger",
  "https://burgers.example.org/?burger=%s",
);

随后,用户访问包含类似以下链接的页面

html
<a href="web+burger:cheeseburger">cheeseburger</a>

如果用户激活 web+burger 链接,浏览器将(可能在询问用户确认后)导航到 https://burgers.example.org/?burger=web+burger:cheeseburger

规范

规范
HTML 标准
# custom-handlers

浏览器兼容性

BCD 表格仅在浏览器中加载