MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Navigator.registerProtocolHandler()

这篇翻译不完整。请帮忙从英语翻译这篇文章

允许web站点将其注册为可以处理指定的协议.

为了安全起见,默认的,web站点只能为其自身注册协议处理器,即处理器的域和协议必须和当前站点匹配.但是用户依然可以通过在Firefox中设置偏爱来允许跨站安装,其方式是在about:config中设置gecko.handlerService.allowRegisterFromDifferentHost为true.

扩展可以注册协议处理器指向其他站点: 如何从跨平台组件对象模块中应用它们可以查阅'参见'章节.

语法

window.navigator.registerProtocolHandler(protocol, url, title);

参数

protocol
站点希望去处理的协议,string类型.例如,你可以通过注册一个处理"sms"协议标记的处理器,去处理SMS文本信息链接.
url
处理器的URL,string类型.这个字符串应该包含一个"%s"的占位符,其会被将要受理的文档的escaped链接所替换.这个链接(译者按:指将要受理的文档的escaped链接,也就是替换占位符的字符串)可能是一个真实的URL,或者是一个电话号码,邮件地址之类的.
这个处理器的URL必须以"http"或者"https"协议标记作为开头.
title
一个用户可以理解的处理器标题.它将为接口对象所需,并展示给用户.

异常

SecurityError
用户代理阻止了处理器的注册.这可能是由于指定了一个非法的协议标记,譬如"http",显然,出于安全考虑,不可为其注册处理器.
SyntaxError
在指定的协议处理地址的字符串中缺失了"%s"占位符.

允许的协议标记

出于安全考虑,registerProtocolHandler()严格限制了允许注册的协议标记.以"web+"作为前缀的方式可以注册一个自定义的标记协议,其至少要有5个字符的长度(包含"web+"前缀),而且只能使用小写的ASCII字母作为名称.例如,"web+burger",如下面的示例所示.

除此之外,还可以使用下文所列的白名单中的协议标记:

  • bitcoin
  • geo
  • im
  • irc
  • ircs
  • magnet
  • mailto
  • mms
  • news
  • nntp
  • sip
  • sms
  • smsto
  • ssh
  • tel
  • urn
  • webcal
  • wtai
  • xmpp

 

示例

如果你的web应用程序的地址是http://www.google.co.uk,你可以像这样注册一个作用于"web+burger"的处理器链接:

navigator.registerProtocolHandler("web+burger",
                                  "https://www.google.co.uk/?uri=%s",
                                  "Burger handler");

这就创建了一个处理器,其允许以web+burger://链接去将用户导向到你的web应用,并且将burger信息插入了到该处理器所指定的链接中(译者按:替换链接中"%s"的占位符).重申一下,这个脚本必须在同一域下运行(本例中就是指所有的google.co.uk下的页面)而且第二个参数必须是以"http"或者"https"协议标记作为开头的链接(本例中是https).

用户会被告知你的代码请求注册协议处理器,所以他们可以选择允许或者拒绝.如下面这个截图所示.

"Register a webmail service as mailto handler" 展示了如何从跨平台组件对象模块(XPCOM)中做到这一切.

规范

Specification Status Comment
WHATWG HTML Living Standard
registerProtocolHandler()
Living Standard Initial definition

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 13[1] 3.0 (1.9) ? 11.60 ?
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support ? 3.0 (3.5) ? ? ?

[1] Protocol whitelist includes mailto, mms, nntp, rtsp, and webcal. Custom protocols must be prefixed with web+.

参见

文档标签和贡献者

 此页面的贡献者: marsoln
 最后编辑者: marsoln,