这篇翻译不完整。请帮忙从英语翻译这篇文章。
允许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应用程序的地址是https://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+
.
参见
- Web-based protocol handlers
- RegisterProtocolHandler Enhancing the Federated Web at Mozilla Webdev
- Web Application APIs - Custom scheme and content handlers - Whitelisted schemes
- Register a webmail service as mailto handler shows how to do
registerProtocolHandler
from XPCOM scope. - XPCOM Interface Reference > nsIWebContentHandlerRegistrar > registerContentHandler - This shows how to use this function XPCOM scope