如何标记电话号码?

我想在HTML文档中将电话号码标记为可调用链接。 我已经阅读了微格式的方法 ,而且我知道, tel:scheme是标准的,但实际上并没有实现。

据我所知,Skype定义了skype:callto:后者已经获得了一些普及。 我想,其他公司有其他的scheme,或跳上callto:火车。

标记电话号码的最佳做法是什么,以便尽可能多的使用VoIP软件的用户只需点击一个链接即可拨打电话?

奖金问题:有没有人知道紧急数字的并发症,如美国的911或德国的110?

干杯,

更新: Microsoft NetMeeting采用WinXP下的callto:scheme。 这个问题表明,Microsoft Office Communicator将处理tel:计划,但不处理callto:计划。 太好了,雷蒙德!

更新2:两年半之后。 这似乎归结为你想要做的数字。 在移动环境中, tel:是要走的路。 如果您认为自己的用户是更多的Skype用户( callto:或者更有可能安装了Google Voice( tel: callto: ,则可以定位桌面。 我个人的意见是,如果有疑问,请使用tel:符合@Sidnicious的答案)。

更新3: User @ rybo111指出,Chrome中的Skype同时跳上了tel:stream行。 我无法证实这一点,因为手头没有机器,但如果这是真的,这意味着我们终于在这里获得了胜利:

  tel: 

tel:scheme在20世纪90年代后期被使用,并在2000年初被RFC 2806 (在2004年被更彻底的RFC 3966淘汰)logging下来,并且不断得到改进 。 支持tel:在iPhone上不是一个任意的决定。

callto:在Skype的支持下, 不是一个标准 ,应该避免,除非专门针对Skype用户。

我? 我刚开始在你的页面上包含正确形成的tel: URI(不用嗅探用户代理),并等待世界上其他电话的追赶:)。

例如

 <a href="tel:+18475555555">1-847-555-5555</a> 

我的testing结果:

拨电至:

  • 诺基亚浏览器:没有反应
  • 谷歌浏览器:要求运行Skype来拨打号码
  • Firefox:要求select一个程序来呼叫号码
  • IE:要求运行Skype来拨打号码

联系电话:

  • 诺基亚浏览器:工作
  • Google Chrome:没有任何反应
  • Firefox:“Firefox不知道如何打开这个url”
  • IE浏览器:无法findurl

最好的select是用电话:在所有手机上都可以使用

然后把这个代码放到桌面上,只有当点击一个链接时才会运行。

我使用http://detectmobilebrowsers.com/来检测移动浏览器,您可以使用任何您喜欢的方法;

 if (!jQuery.browser.mobile) { jQuery('body').on('click', 'a[href^="tel:"]', function() { jQuery(this).attr('href', jQuery(this).attr('href').replace(/^tel:/, 'callto:')); }); } 

所以基本上你覆盖了你所有的基地。

电话:在所有电话上都可以使用号码打开拨号器

callto:在您的计算机上运行,​​从Firefox,Chrome浏览器连接到Skype

正如人们所期望的那样,WebKit对tel:的支持也扩展到Android手机浏览器 – 仅供参考

我保留这个答案为“历史”的目的,但不推荐它了。 请参阅上面的@Sidnicious的答案和我的更新2。

因为它看起来像callto和电话家伙之间的平局,所以我希望在希望中抛出一个可能的解决scheme,那就是你的评论会让我回到光明的道路上;-)

使用callto:因为大多数桌面客户端将处理它:

 <a href="callto:0123456789">call me</a> 

那么,如果客户端是iPhone,则replace链接:

 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:")); } } } }; 

对此解决scheme有何异议? 我应该最好从tel:开始tel:

移动Safari(iPhone和iPod Touch)使用tel:scheme。

如何从iPhone上的网页拨打电话号码?

RFC3966为电话号码定义了IETF标准URI,即“tel:”URI。 这是标准。 有没有类似的标准,指定“callto:”,这是一个Skype平台上的特定约定,允许注册一个URI处理程序来支持它。

这对我工作:

1.制定符合标准的链接:

  <a href="tel:1500100900">

2.当移动浏览器未被检测到时replace,用于Skype:

 $("a.phone") .each(function() { this.href = this.href.replace(/^tel/, "callto"); }); 

select通过类replace链接似乎更有效。 当然,它只适用于.phone类的主播。

我已经把它放在函数中if( !isMobile() ) { ...所以它只在检测到桌面浏览器时触发。 但是这个很可能已经过时了

 function isMobile() { return ( ( navigator.userAgent.indexOf( "iPhone" ) > -1 ) || ( navigator.userAgent.indexOf( "iPod" ) > -1 ) || ( navigator.userAgent.indexOf( "iPad" ) > -1 ) || ( navigator.userAgent.indexOf( "Android" ) > -1 ) || ( navigator.userAgent.indexOf( "webOS" ) > -1 ) ); } 

我使用tel:为我的项目。

它在Chrome,Firefox,IE9和8,Chrome手机以及我的索尼爱立信智能手机上的移动浏览器上都有效。

callto:在移动浏览器中没有工作。

虽然苹果推荐tel:在他们的文档为移动Safari,目前(iOS 4.3)它接受callto:一样。 所以我build议使用callto:在一个通用的网站,因为它与Skype和iPhone都适用,我希望它也能在Android手机上使用。

更新(2013年6月)

这仍然是决定你想要什么网页提供的问题。 在我的网站上,我提供了tel:callto:链接(后者标记为Skype),因为Mac上的桌面浏览器对tel:链接不做任何事情,而移动Android对callto:链接则不做任何事情。 即使使用Google Talk插件的谷歌浏览器也不会响应tel:链接。 不过,我更喜欢在桌面上提供这两个链接,以防有人使tel:链接工作在他们的计算机上。

如果网站devise规定我只提供一个链接,我会使用tel:链接,我会尝试更改为callto:在桌面浏览器上。

我会使用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:协议replace链接,在可用的情况下使用Skype。

为了抑制不支持的协议的错误页面,链接被定位到新的隐藏的iframe。

不幸的是,如果url已经成功加载到iframe中,似乎无法检查。 似乎没有错误事件被解雇。

由于callto:默认支持skype(在Skype设置中设置),其他人也支持它,所以我build议使用callto:而不是skype: callto:

使用jQuery,将页面上的所有美国电话号码replace为相应的callto:tel:scheme。

 // create a hidden iframe to receive failed schemes $('body').append('<iframe name="blackhole" style="display:none"></iframe>'); // decide which scheme to use var scheme = (navigator.userAgent.match(/mobile/gi) ? 'tel:' : 'callto:'); // replace all on the page $('article').each(function (i, article) { findAndReplaceDOMText(article, { find:/\b(\d\d\d-\d\d\d-\d\d\d\d)\b/g, replace:function (portion) { var a = document.createElement('a'); a.className = 'telephone'; a.href = scheme + portion.text.replace(/\D/g, ''); a.textContent = portion.text; a.target = 'blackhole'; return a; } }); }); 

感谢@jonas_jonas的想法。 需要优秀的findAndReplaceDOMText函数 。

我使用普通的<a href="tel:+123456">12 34 56</a>标记,并通过pointer-events: none;使这些链接对于桌面用户不可点击pointer-events: none;

 a[href^="tel:"] { text-decoration: none; } .no-touch a[href^="tel:"] { pointer-events: none; cursor: text; } 

对于不支持指针事件(IE <11)的浏览器,JavaScript可以阻止点击(例如依赖于Modernizr和jQuery):

 if(!Modernizr.touch) { $(document).on('click', '[href^="tel:"]', function(e) { e.preventDefault(); return false; }); }