Navigator: registerProtocolHandler() 方法
Navigator 接口的 registerProtocolHandler() 方法允许网站注册它们处理特定 URL 方案(也称为协议)的能力,以打开或响应这些链接。
例如,此 API 允许网页邮件站点处理 mailto: URL,或 VoIP 站点处理 tel: URL。
要注册一个协议处理器,网站会调用 registerProtocolHandler(),传入要注册的协议和一个 URL 模板。
当用户激活使用已注册协议的链接时,浏览器会将已激活链接的 href 插入到处理程序注册期间提供的 URL 模板中,并导航当前页面到生成的 URL。
浏览器可能会询问用户是否允许该页面处理该协议,无论是注册协议时还是用户激活链接时。
语法
registerProtocolHandler(scheme, url)
参数
scheme-
一个包含网站希望处理的协议方案的字符串。
这可能是一个自定义方案,在这种情况下,方案名称
- 以
web+开头 - 在
web+前缀后至少包含一个字母 - 仅包含小写 ASCII 字母。
否则,该方案必须是以下之一
bitcoinftpftpsgeoimircircsmagnetmailtomatrixmmsnewsnntpopenpgp4fprsftpsipsmssmstossh电话urnwebcalwtaixmpp
- 以
url-
一个包含处理程序 URL 的字符串。此 URL 必须包含
%s,它将作为占位符,替换为要处理的经过转义的 URL。处理程序 URL 必须使用
https方案,并且必须与尝试注册处理程序的网页具有相同的源。
返回值
无(undefined)。
异常
SecurityErrorDOMException-
用户代理阻止了注册。这可能发生在以下情况:
- 已注册的方案(协议)无效,例如浏览器自身处理的方案(
https:、about:等) - 处理程序 URL 的源与调用此 API 的页面的源不匹配。
- 处理程序的 URL 方案不是
https。
- 已注册的方案(协议)无效,例如浏览器自身处理的方案(
SyntaxErrorDOMException-
处理程序的 URL 中缺少
%s占位符。
示例
注册 mailto 协议的处理程序
网页通过非 https 协议链接到资源的场景很常见。一个例子是 mailto: 协议。当网页作者希望为用户提供一种方便的方式直接从网页发送电子邮件时,他们可以使用 mailto 链接。
<a href="mailto:webmaster@example.com">Web Master</a>
当链接被激活时,浏览器应该启动处理电子邮件的默认桌面应用程序。您可以将其视为一个*基于桌面*的协议处理程序。
基于 Web 的协议处理程序也允许基于 Web 的应用程序参与此过程。位于 mail.example.org 的电子邮件 Web 应用可以通过以下代码注册来处理 mailto 链接:
navigator.registerProtocolHandler("mailto", "https://mail.example.org/?to=%s");
此后,当用户在任何网站上点击 mailto 链接时,浏览器将(在可能询问用户确认后)导航到 https://mail.example.org/?to=mailto:webmaster@example.com。该页面可以解析 URL 参数以提取地址,并使用此地址来初始化一封电子邮件。
注册自定义协议的处理程序
在此示例中,一个页面通过以下代码注册了一个 web+burger 协议的处理程序:
navigator.registerProtocolHandler(
"web+burger",
"https://burgers.example.org/?burger=%s",
);
之后,用户访问包含类似以下链接的页面:
<a href="web+burger:cheeseburger">cheeseburger</a>
如果用户激活 web+burger 链接,浏览器将(在可能询问用户确认后)导航到 https://burgers.example.org/?burger=web+burger:cheeseburger。
规范
| 规范 |
|---|
| HTML # custom-handlers |
浏览器兼容性
加载中…