导航器:registerProtocolHandler() 方法
Navigator
方法 registerProtocolHandler()
允许网站注册它们打开或处理特定 URL 方案(也称为协议)的能力。
例如,此 API 允许 webmail 网站打开 mailto:
URL,或 VoIP 网站打开 tel:
URL。
要注册协议处理程序,网站会调用 registerProtocolHandler()
,传入要注册的协议和模板 URL。
当用户激活使用注册协议的链接时,浏览器会将激活链接的 href
插入处理程序注册期间提供的 URL 模板中,并将当前页面导航到生成的 URL。
浏览器可能会询问用户是否确认他们希望页面被允许处理该协议,无论是注册协议时还是用户激活链接时。
语法
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
链接,当他们希望提供一种方便的方式让用户直接从网页发送电子邮件时
<a href="mailto:[email protected]">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:[email protected]
。此页面可以解析 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 |
浏览器兼容性
BCD 表格仅在浏览器中加载