如何标记电话号码?

503

我希望在HTML文档中将电话号码标记为可拨打链接。我已经阅读了微格式的方法,并且知道tel:方案是标准的,但实际上几乎没有实现。

据我所知,Skype定义了skype:callto:,后者已经有了一定的流行度。我认为其他公司可能有其他方案或跟随callto:的列车。

如何最佳地标记电话号码,以便尽可能多的使用VoIP软件的人只需点击链接即可进行通话?

奖励问题:有人知道像美国的911或德国的110这样的紧急号码是否存在问题吗?

更新: Microsoft NetMeeting在WinXP下接受callto:方案。 这个问题建议,Microsoft Office Communicator将处理tel:方案,但不是callto:方案。太好了,Redmond!

更新2:两年半后现在。似乎归结为您想要使用号码做什么。在移动上下文中,tel:是最好的选择。针对桌面,如果您认为用户更喜欢Skype(callto:),或者更有可能安装类似Google Voice(tel:)的东西,则取决于您。我个人的意见是,如果不确定,请使用tel:(与@Sidnicious的答案一致)。

更新3:用户@rybo111指出,Chrome中的Skype现在已经跟随tel:方案。我无法验证这一点,因为没有同时拥有两台电脑,但如果确实如此,这意味着我们终于有了一个胜利者:tel:


1
不幸的是,这似乎取决于您的供应商(VoiP,手机公司或其他)。这可能会收费用于800号码。 - Boldewyn
1
我在Chrome中使用Google语音,但它无法识别tel: URI。我仍然坚持使用callto:和电话号码的显示,因为移动电话浏览器应该会自动检测到该号码。 - Old Pro
6
标题可能有些误导,实际上这个问题是关于“电话号码应该使用哪种URL格式”,而不是如何标记它们。 - Raedwald
1
当使用Chrome和tel:时,Skype会被提示,因此您最好删除关于Skype使用callto:的评论。 - rybo111
1
请问您能否尝试将您的问题更新编辑为相应的答案呢?这样会更加清晰明了。 - idmean
显示剩余6条评论
14个回答

1

尽管苹果公司在其移动版Safari文档中推荐使用tel:,但目前(iOS 4.3)它同样接受callto:。因此,在通用网站上,我建议使用callto:,因为它可以与Skype和iPhone一起工作,并且我希望它也可以在Android手机上工作。

更新(2013年6月)

这仍然是决定您想要提供什么样的网页内容的问题。在我的网站上,我提供tel:callto:链接(后者标记为适用于Skype),因为Mac桌面浏览器不会对tel:链接做任何事情,而移动设备Android则不支持callto:链接。即使是安装了Google Talk插件的Google Chrome也不响应tel:链接。尽管如此,我仍然更喜欢在桌面端提供两个链接,以防有人费劲地让tel:链接在他们的电脑上工作。

如果网站设计要求我只提供一个链接,我会使用一个tel:链接,并尝试在桌面浏览器上将其更改为callto:


1
最新的开源Android“冰淇淋三明治”版本中的股票浏览器似乎仍然只支持tel:;点击callto:链接会导致“网页不可用”。 - rymo

1
由於Skype(在Skype設置中設置)默認支持callto:,而其他一些軟件也支持它,因此我建議使用callto:而不是skype:

3
我同意这一点。但总的来说,它似乎归结为tel: vs callto:,而这并不容易理解。 - Boldewyn

0
使用jQuery,将页面上的所有美国电话号码替换为相应的callto:tel:方案。
// 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
这个解决方案并不理想,因为分析用户代理字符串被认为是不好的做法。考虑一个支持 tel URI 但没有报告自己为移动设备的设备。 - Arturo Torres Sánchez

-1

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

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

对于不支持 pointer-events(IE < 11)的浏览器,可以使用 JavaScript 阻止点击(示例依赖于 Modernizr 和 jQuery):

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

1
使用 Modernizr.touch 来推断对 tel: 的支持是不可靠的,因为它只能判断触摸事件的支持。但是在 iPad、Windows 平板电脑等设备上存在例外情况。 - zachleat
即使在 Windows 桌面上运行的 Chrome 也会将自己报告为触摸设备。 - Arturo Torres Sánchez
一些桌面级机器确实支持tel:URL。以Mac为例,Mac上的FaceTime是标准的,并且与tel:一起使用,甚至使用Handoff / Continuity将用户的iPhone连接起来,因此不再明智地使用pointer-events:none来针对桌面设备。 - OxC0FFEE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接