markup - 如何标记电话号码?

  显示原文与译文双语对照的内容

我想将电话号码标记为HTML文档中的可以调用链接。 我读过微格式的方法,和我知道, tel: 方案将标准,但实际上没有实现。

就像我所知,Skype定义了 skype:callto:,后者得到了一些流行。 假设其他公司有其他的方案或者在 callto:的火车上跳。

什么将是一个最佳实践mark-up电话号码,以便尽可能多的人使用voip软件可以点击链接调用?

奖金的问题:谁知道并发症等紧急号码在美国或德国 110 911?

cheers,

更新:微软网络会议需要 callto: winxp下计划。 表明这个问题,微软office沟通者将处理 tel: 计划但不是 callto:的。 ,Redmond !

更新 2: 2 和半年后。 似乎归结为你想要的数量。 在移动环境中,tel: 是一种方式。 针对桌面由你,如果你认为你的skype用户更人( callto: ) 或将更可能有谷歌语音( tel: ) 安装。 我的个人观点是,当怀疑使用 tel: ( 与 @Sidnicious'应答一致) 时。

更新 3: 用户 @rybo111 指出,skype在 Chrome 同时跳上 tel: 潮流。 我不能确认,因为没有机器,但如果这是真的,这意味着我们最终赢家:


 tel:

时间:

tel: 方案是用于 1990年代末和记录在早期 2000 RFC 2806 ( 由 more-thorough RFC 3966中的 。取代) 和继续改善。 在iPhone上支持 tel: 不是一个任意的决定。

callto:, 而支持skype,不是标准和应该避免,除非专门针对skype用户。

我我将在你的页面上开始包括 properly-formed tel: uri,并等待世界上的其他电话跟上:) 。

示例:


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

最好的选择是从电话开始: 它可以在所有的手机上运行

然后放入这里代码,该代码只会在桌面上运行,并且只有当链接被点击时才会运行。

我使用 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:'));
 });
}

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

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

你的计算机可以从 Firefox 连接到 skype,Chrome

我为"历史"保留这个答案,但不再推荐它。 请参阅上面的@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: 开始?

Mobile Safari ( iPhone & ipodtouch ) 使用 tel: 方案。

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

我这里可以工作:

1.make 标准兼容链接:

 <a href="tel:1500100900">

当没有检测到移动浏览器时,2.replace:


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

选择要通过类替换的链接似乎更有效。 当然它只在带有 .phone 类的锚点上工作。

我把它放在函数里了 if(!isMobile() ) {.. . 所以只有在检测到桌面浏览器时才触发。 但这个是problably过时的。。


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: ( 推荐的) 。 但是要有更好的回退/不显示错误页面,我将使用如下( 使用 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 。

为不支持的抑制 error-pages protocol(s), 链接是针对一个新的隐藏的iframe。

不幸的是,如果在iframe中成功加载了 url,似乎无法检查。 似乎没有触发任何错误事件。

我使用普通 <a href="tel:+123456">12 34 56</a> 标记并将这些链接作为桌面用户的non-clickable通过 pointer-events: none; 进行链接


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

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


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

...