如何标记电话号码?
我想在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; }); }