Navigator: unregisterProtocolHandler() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

Navigator 接口的 unregisterProtocolHandler() 方法用于移除给定 URL 协议的协议处理器。

此方法是 registerProtocolHandler() 的逆操作。

语法

js
unregisterProtocolHandler(scheme, url)

参数

scheme

一个包含要注销的协议处理器中 允许的协议的字符串。例如,你可以通过传递 "sms" 协议来注销 SMS 短信链接的处理程序。

url

一个包含处理程序 URL 的字符串。此 URL 应该与注册处理程序时使用的 URL 匹配(例如,必须包含 %s

返回值

无(undefined)。

异常

SecurityError DOMException

用户代理阻止了注销。这可能发生的原因是:

  • 协议(scheme)无效,例如浏览器自行处理的协议(https:about: 等)
  • 处理程序 URL 的 与调用此 API 的页面的源不匹配。
  • 浏览器要求此函数必须从安全上下文调用。
  • 浏览器要求处理程序的 URL 必须是 HTTPS。
SyntaxError DOMException

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

允许的协议

出于安全原因,unregisterProtocolHandler() 限制了可以注销哪些协议。

自定义协议可以被注销,只要

  • 自定义协议的名称以 web+ 开头
  • 自定义协议的名称在 web+ 前缀之后至少包含 1 个字母
  • 自定义协议的名称只包含小写 ASCII 字母。

例如,web+burger,如下面的 示例所示。

否则,该协议必须是以下之一:

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

示例

如果你的网站是 burgers.example.com,并且你有一个 web+burger: 协议,你可以像这样注销它的处理程序:

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

此脚本必须从与处理程序 URL 相同的源运行(因此是 https://burgers.example.com 的任何页面),并且处理程序 URL 必须是 httphttps

规范

规范
HTML
# dom-navigator-unregisterprotocolhandler-dev

浏览器兼容性