我想在HTML文档中标记一个电话号码为可调用链接。我读过微格式方法,我知道tel:方案是标准的,但实际上没有实现。
据我所知,Skype定义了Skype:和callto:,后者已经获得了一些流行。我想,其他公司要么有其他的计划,要么就搭上了“呼叫列车”。
什么是标记电话号码的最佳实践,以便尽可能多的人使用VoIP软件只需点击链接就可以接听电话?
额外的问题:有人知道紧急号码的并发症吗,比如美国的911或德国的110 ?
更新:Microsoft NetMeeting在WinXP下接受callto:方案。这个问题表明,Microsoft Office Communicator将处理tel:方案,但不处理callto: ones。好,雷蒙德!
更新2:现在已经过去两年半了。这似乎可以归结为你想用这个数字做什么。在移动环境中,tel:是可行的。如果你认为你的用户更多是Skype用户(callto:),或者更可能安装谷歌Voice (tel:)之类的东西,这取决于你。我个人的观点是,有疑问时使用tel:(与@Sidnicious的回答一致)。
更新3:用户@rybo111指出,Chrome中的Skype同时也加入了tel:潮流。我无法证实这一点,因为没有一台机器同时拥有这两种设备,但如果这是真的,这意味着我们终于有了一个赢家:tel:
我会使用电话:(建议)。但是为了有一个更好的回退/不显示错误页面,我会使用这样的东西(使用jquery):
// enhance tel-links
$("a[href^='tel:']").each(function() {
var target = "call-" + this.href.replace(/[^a-z0-9]*/gi, "");
var link = this;
// load in iframe to supress potential errors when protocol is not available
$("body").append("<iframe name=\"" + target + "\" style=\"display: none\"></iframe>");
link.target = target;
// replace tel with callto on desktop browsers for skype fallback
if (!navigator.userAgent.match(/(mobile)/gi)) {
link.href = link.href.replace(/^tel:/, "callto:");
}
});
这里的假设是,在userAgent-string中有移动标记的移动浏览器支持tel:协议。对于其余部分,我们将链接替换为callto:协议,以便在可用的情况下回退到Skype。
为了抑制不支持协议的错误页,链接指向一个新的隐藏iframe。
不幸的是,它似乎不可能检查,如果url已成功加载在iframe。似乎没有触发错误事件。
我会使用电话:(建议)。但是为了有一个更好的回退/不显示错误页面,我会使用这样的东西(使用jquery):
// enhance tel-links
$("a[href^='tel:']").each(function() {
var target = "call-" + this.href.replace(/[^a-z0-9]*/gi, "");
var link = this;
// load in iframe to supress potential errors when protocol is not available
$("body").append("<iframe name=\"" + target + "\" style=\"display: none\"></iframe>");
link.target = target;
// replace tel with callto on desktop browsers for skype fallback
if (!navigator.userAgent.match(/(mobile)/gi)) {
link.href = link.href.replace(/^tel:/, "callto:");
}
});
这里的假设是,在userAgent-string中有移动标记的移动浏览器支持tel:协议。对于其余部分,我们将链接替换为callto:协议,以便在可用的情况下回退到Skype。
为了抑制不支持协议的错误页,链接指向一个新的隐藏iframe。
不幸的是,它似乎不可能检查,如果url已成功加载在iframe。似乎没有触发错误事件。
我保留这个答案是为了“历史”目的,但不再推荐它了。请看上面@Sidnicious的回答和我的更新2。
因为这看起来像是电话和电话之间的平局,我想抛出一个可能的解决方案,希望你的评论能让我回到光明的道路上;-)
使用callto:,因为大多数桌面客户端都会处理它:
<a href="callto:0123456789">call me</a>
然后,如果客户端是iPhone,替换链接:
window.onload = function () {
if (navigator.userAgent.match (/iPhone/i)) {
var a = document.getElementsByTagName ("a");
for (var i = 0; i < a.length; i++) {
if (a[i].getAttribute ('href').search (/callto:/i) === 0) {
a[i].setAttribute ('href', a[i].getAttribute ('href').replace (/^callto:/, "tel:"));
}
}
}
};
有人反对这个解决方案吗?我应该从tel:开始吗?