ChatGPT解决这个技术问题 Extra ChatGPT

如何标记电话号码?

我想将电话号码标记为 HTML 文档中的可调用链接。我已阅读 the microformats approach,并且我知道,tel: 方案将是标准的,但实际上没有实现。

据我所知,Skype 定义了 skype:callto:,后者已经获得了一定的普及。我假设,其他公司要么有其他计划,要么跳上 callto: 火车。

标记电话号码的最佳做法是什么,以便尽可能多的使用 VoIP 软件的人只需单击链接即可接听电话?

额外问题:有谁知道紧急电话号码的并发症,例如美国的 911 或德国的 110?

干杯,

更新: Microsoft NetMeeting 在 WinXP 下采用 callto: 方案。 This question 建议,Microsoft Office Communicator 将处理 tel: 方案,但不处理 callto: 方案。太好了,雷德蒙德!

更新 2: 两年半后的现在。它似乎归结为你想用这个数字做什么。在移动环境中,tel: 是可行的方法。如果您认为您的用户更多是 Skype 用户 (callto:) 或者更有可能安装 Google Voice (tel:) 之类的东西,那么定位桌面取决于您。我个人的意见是,如有疑问,请使用 tel: (与@Sidncious 的回答一致)。

更新 3: 用户 @rybo111 指出,Chrome 中的 Skype 同时也加入了 tel: 的潮流。我无法验证这一点,因为手头没有机器,但如果这是真的,这意味着我们最终在这里获得了胜利:tel:

不幸的是没有。这似乎归结为您的提供商(VoiP、手机通讯或其他)所做的。这也可能是对 800 个号码收费。
我在 Chrome 中使用 Google Voice,但它无法识别 tel: URI。我仍然坚持使用 callto: 和显示电话号码的理论,即手机浏览器无论如何都应该自动检测号码。
尽管有标题,但这个问题实际上是“您应该为电话号码使用什么 URL 方案”,而不是如何标记它们。
将 Chrome 与 tel: 一起使用时会提示 @Boldewyn Skype,所以也许您应该删除最后关于使用 callto: 的 Skype 的评论?
您能否尝试将您的问题更新编辑为相应的答案。像这样,有点乱。

C
Community

tel: 方案是 used in the late 1990s,并在 2000 年初记录了 RFC 2806(在 2004 年被更彻底的 RFC 3966 淘汰)和 continues to be improved。在 iPhone 上支持 tel: 并不是一个武断的决定。

callto:,虽然 Skype 支持,但不是标准,除非专门针对 Skype 用户,否则应避免使用。

我?我只是开始在您的页面上包含格式正确的 tel: URI(无需嗅探用户代理),然后等待世界其他手机赶上 :) 。

例子:

1-847-555-5555


感谢您的详细回答!既然我问了这个问题,我也很想遵循这种方法。使用标准并告诉抱怨的人,他们使用了糟糕的应用程序/工具。虽然这很难,但如果这个是你的客户,我认为你是对的。尽管如此,如果我必须考虑 Skype 用户,我会反过来使用我的 JavaScript 解决方案。
现在是 2014 年,电话:现在适用于 Skype。但是,如果您想发起对 Skype Echo / Sound Test Service 的呼叫,链接将是 <a href="skype:echo123?call">Call the Skype Echo / Sound Test Service</a>来自msdn.microsoft.com/en-us/library/office/…
有人试过 href="tel://1-555-555-5555" 格式吗? Tutsplus 的人推荐它code.tutsplus.com/tutorials/…
根据我使用 tel: 标签 Skype 的经验,国家/地区代码需要在号码上加上 + 号(例如,“+44”表示英国号码)才能正确解析号码。否则它只会打开 Skype 但不会尝试拨号。
m
mordy

最好的选择是从 tel 开始:它适用于所有手机

然后输入这段代码,它只会在桌面上运行,并且只有在单击链接时才会运行。

我正在使用 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


是的,这 -- callto: 在 Android 上根本不起作用(请参阅我对 Murat 答案的评论),并且 tel: 在桌面上不起作用。很不幸,真的。
嗯,可悲的是,一个快速的 jsfiddle 似乎也不能让这个工作...... jsfiddle.net/tchalvakspam/gVZYt/3
在 Mac 10.8 上使用 Seamonkey 2.20 放在 wordpress 主题的 header.php 文件的 <body <?php body_class(); ?>> 代码下方。
callto:在 mac 中不适用于 chrome 并且版本是最新的
遗憾的是,这在 JQuery 1.9 jquery.com/upgrade-guide/1.9/#jquery-browser-removed 中已被贬值
r
rymo

正如人们所预料的那样,WebKit 对 tel: 的支持也扩展到了 Android 移动浏览器 - 仅供参考


作为评论会更好,但无论如何都可以知道。
B
Boldewyn

我出于“历史”目的保留此答案,但不再推荐它。请参阅上面的@Sidncious' 答案和我的更新 2。

由于它看起来像是 callto 和 tel 家伙之间的平局,我想提出一个可能的解决方案,希望你的评论能让我回到光明的道路上;-)

使用 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: 开始吗?


可能 iPhone 也支持 callto 方案,但 Apple 更喜欢 tel,所以这是文档中提到的那个。
看我的回答。 callto: 是专有的 URI 方案,所以我不会从那里开始。
callto:在 mac 中不适用于 chrome,并且版本是最新的。
这并不让我感到惊讶。 2009 年,当给出了答案时,情况就完全不同了。此外,您还需要注册 callto: 方案的第三方程序,例如 Skype。 Chrome 本身不知道应该做什么。
C
Cœur

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

How do I dial a phone number from a webpage on iPhone?


因此,如果主要目标用户是 iPhone 或 iPod Tough(可能还有其他移动设备,我不知道...),您应该使用 tel:如果主要用户是普通的 Web 客户端,(IE、Firefox 等)使用 Skype 或其他一些 VoIP 软件,我认为 callto: 会是最好的。
C
Community

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


西德尼西厄斯就是这么说的,是的。
d
devein

这对我有用:

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

<a href="tel:1500100900">

2.在没有检测到移动浏览器时替换它,对于Skype:

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

通过类选择要替换的链接似乎更有效。当然,它仅适用于具有 .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 )
    );
}

检测移动浏览器的“正确”方法是检查不区分大小写的字符串“mobile”。
f
fuma

我将 tel: 用于我的项目。

它适用于 Chrome、Firefox、IE9&8、Chrome 手机和我索尼爱立信智能手机上的移动浏览器。

但是 callto: 在移动浏览器中不起作用。


j
jonas_jonas

我会使用 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。

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

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


很好地使用隐藏的 iframe!
a
awe

由于 Skype 默认支持 callto:(在 Skype 设置中设置),并且其他人也支持它,因此我建议使用 callto: 而不是 skype:


在这里我同意。但总的来说,它似乎归结为 tel: vs callto:,这并不容易。
O
Old Pro

尽管 Apple 在他们的 Mobile 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:


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

使用 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 function


这个解决方案并不理想,因为分析用户代理字符串被认为是不好的做法。考虑支持 tel URI 但不将自身报告为移动设备的设备。
A
Alex

我使用普通的 <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;
}

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

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

使用 Touch Event supportModernizr.touch 来推断对 tel: 的支持是不可靠的。简单的例外情况:iPad、Windows 平板电脑等。
甚至在 Windows 桌面上运行的 Chrome 也将自己报告为触摸设备。
一些桌面级机器确实支持 tel: url。对于特定于 Mac 的示例,Mac 上的 FaceTime 是标准的,并且可以与 tel: 一起使用,甚至可以将用户的 iPhone 与 Handoff/Continuity 一起使用,因此使用 pointer-events: none 来定位桌面可能不再明智.