How to mark-up phone numbers?
我想在HTML文档中将电话号码标记为可调用链接。我已经阅读了微格式方法,我知道,
据我所知,Skype定义了
标记电话号码的最佳做法是什么,以便尽可能多的人使用VoIP软件只需点击链接即可接听电话?
奖金问题:有没有人知道紧急号码的并发症,如美国的911或德国的110?
干杯,
更新:Microsoft NetMeeting在WinXP下采用
更新2:两年半以后。这似乎归结为你想用这个数字做什么。在移动环境中,
更新3:用户@ rybo111指出,Chrome中的Skype同时也加入了
1 | tel: |
我?我只是开始在你的页面上包含正确形成的
例:
1 | 1-847-555-5555 |
我的测试结果:
拨电至:
- Nokia Browser:没有任何反应
- 谷歌浏览器:要求运行Skype来拨打该号码
- Firefox:要求选择一个程序来拨打该号码
- IE:要求运行Skype来拨打该号码
联系电话:
- 诺基亚浏览器:工作
- 谷歌Chrome:没有任何反应
- Firefox:"Firefox不知道如何打开这个网址"
- IE:找不到网址
最好的选择是从tel开始:适用于所有手机
然后输入此代码,该代码仅在桌面上运行,并且仅在单击链接时运行。
我正在使用http://detectmobilebrowsers.com/来检测移动浏览器,您可以使用您喜欢的任何方法
1 2 3 4 5 6 | if (!jQuery.browser.mobile) { jQuery('body').on('click', 'a[href^="tel:"]', function() { jQuery(this).attr('href', jQuery(this).attr('href').replace(/^tel:/, 'callto:')); }); } |
所以基本上你涵盖了所有的基础。
tel:适用于所有手机,用号码打开拨号器
callto:在您的计算机上工作,从firefox,chrome连接到skype
正如人们所预料的那样,WebKit对
我保留这个答案是为了"历史性"的目的,但不再推荐它了。请参阅上面的@Sidnicious'回答和我的更新2。
因为它看起来像是callto和tel之间的平局,所以我想提出一个可能的解决方案,希望你的评论会让我重新回到光明之路上;-)
使用
1 | call me |
然后,如果客户端是iPhone,请替换链接:
1 2 3 4 5 6 7 8 9 10 | 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:")); } } } }; |
对此解决方案有任何异议?我应该从
Mobile Safari(iPhone和iPod Touch)使用
如何从iPhone上的网页拨打电话号码?
这对我有用:
1.制定符合标准的链接:
1 |
2.在未检测到移动浏览器时替换它,对于Skype:
1 2 3 4 5 6 | $("a.phone") .each(function() { this.href = this.href.replace(/^tel/, "callto"); }); |
选择通过类替换的链接似乎更有效。
当然它只适用于
我把它放在函数
1 2 3 4 5 6 7 8 9 | 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 ) ); } |
RFC3966定义了电话号码的IETF标准URI,即'tel:'URI。这是标准。没有类似的标准指定'callto:',这是Skype在平台上的一种特殊约定,允许注册URI处理程序来支持它。
我会使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // 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中具有移动标记的移动浏览器支持
要禁止不支持的协议的错误页面,链接将定位到新的隐藏iframe。
不幸的是,如果网址已成功加载到iframe中,似乎无法检查。似乎没有触发错误事件。
我用
它适用于我的索尼爱立信智能手机上的Chrome,Firefox,IE9&amp; 8,Chrome移动设备和移动浏览器。
但
虽然Apple建议在他们的Mobile Safari文档中使用
更新(2013年6月)
这仍然是决定您希望您的网页提供什么的问题。在我的网站上,我提供
如果网站设计规定我只提供一个链接,我会使用
由于skype默认支持
使用jQuery,使用适当的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // 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函数。
我使用普通的
1 2 3 4 5 6 7 | a[href^="tel:"] { text-decoration: none; } .no-touch a[href^="tel:"] { pointer-events: none; cursor: text; } |
对于不支持指针事件(IE <11)的浏览器,可以使用JavaScript阻止点击(示例依赖于Modernizr和jQuery):
1 2 3 4 5 6 | if(!Modernizr.touch) { $(document).on('click', '[href^="tel:"]', function(e) { e.preventDefault(); return false; }); } |