电话链接的现状

Avatar of Geoff Graham
Geoff Graham

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 $200 的免费信用额度!

电话链接确实存在。就像您点击(可能)跳转到另一个页面的锚链接一样,这些链接是您点击在支持电话功能的设备上拨打电话的链接。它们已经存在很长时间了。然而,它们让我很困惑。例如,许多设备会自动识别电话号码并为我们提供链接,但并非总是如此。

移动设备上的网络流量和能够拨打电话的桌面应用程序的数量都足以让我们更深入地了解电话链接。

默认用法

我们在本网站上有一个关于电话链接的 代码片段,它自 2011 年就一直存在。

<a href="tel:1-562-867-5309">1-562-867-5309</a>

这在文本链接上也适用

<a href="tel:1-562-867-5309">Click to Call!</a>

tel:与其说是一个功能,不如说是一个协议,就像 http:mailto:<a> 标签功能的协议一样。规范本身对此没有说明,尽管 HTML5 确实提供了对自定义协议处理程序的支持,从而允许使用此类协议。

您可能想知道,在没有关于它的官方规范的情况下,为什么 tel: 可以被认为是默认用法。这要归功于它是在 2000 年 就提出的标准,后来被 iOS 采用,使其在 2007 年左右成为事实上的标准。还有其他基于电话的协议(我们将在后面介绍),但鉴于 tel: 相对突出,我们将重点介绍它。

浏览器支持

我们看到 tel: 作为没有官方文档的链接的协议处理程序出现;在没有文档的情况下,我们经常会看到浏览器支持和行为方面的差异。这并不是说浏览器无法识别 <a> 标签本身。相反,浏览器可能会对点击该链接时要执行的操作做出不同的决定。例如,浏览器可能会假设需要打开另一个应用程序,并会触发一个对话框询问要使用哪个应用程序。在其他情况下,链接可能完全被忽略。

浏览器 是否链接? 点击时...
Android 启动电话应用程序
BlackBerry 9900 发起电话呼叫
Chrome 触发对话框,确认使用其他应用程序
Edge 触发对话框,确认使用其他应用程序
Internet Explorer 11 触发对话框,确认使用其他应用程序
Internet Explorer 11 Mobile 发起电话呼叫
iOS 触发选项,呼叫、发短信、复制或将号码添加到联系人应用程序
Opera(OSX) 触发对话框,确认使用其他应用程序
Opera(Windows) 触发错误对话框,该对话框无法识别该协议
Safari 启动 FaceTime

设置电话链接的样式

设置电话号码的样式就像设置任何其他链接一样。事实上,它将继承锚点的默认样式。

a {
  color: orange;
  text-decoration: none;
}

假设我们只想对电话链接应用样式。我们可以使用伪选择器来在给定 URL 中搜索 tel: 文本。

a[href^="tel:"] {
  color: orange;
  text-decoration: none;
}

Tuts+ 有一个不错的技巧,它使用 ::before 伪选择器在显示数字之前添加 unicode 电话字符。

a[href^="tel:"]:before {
  content: "\260e";
  margin-right: 0.5em;
}

其他与电话相关的链接

信不信由你,tel: 不是通过链接发起电话呼叫的唯一方法。我们还可以使用以下一些其他自定义基于电话的协议处理程序。

  • callto:tel: 完全相同,但用于通过 Skype 应用程序发起呼叫。
  • 自动检测:许多浏览器会自动检测 HTML 中的电话号码并将其链接起来,无需更改标记。例如,iOS 会完全这样做,但在 Android 上的 Chrome 似乎并非如此。
  • sms: 跳过呼叫,直接进入短信。这似乎比 tel: 在包括移动设备在内的浏览器中支持度低得多。
  • fax: 使用传真机重回未来。同样,可靠性不佳。

最佳实践

在谈论关于没有规范的内容的最佳实践时,这有点滑稽。规范 确实对“点击呼叫”理念给出了简短的意见,但在处理电话号码和链接时,需要注意以下几点。

考虑上下文

电话链接可以成为绝佳的号召性用语,尤其是在移动电话上,因为它减少了内容与呼叫之间的摩擦。同时,电话链接也可以被认为是桌面体验的障碍,因为如果设备缺少支持该链接的应用程序,则无法进行电话呼叫。

一个想法是专门为电话链接创建一个类,并尝试根据我们对浏览器的了解来显示或隐藏它们。Modernizr 和媒体查询在这里很有用,尽管完全不精确。

使用国家代码

国家代码不是必需的,但对于拥有国际流量的网站来说,它可能是不错的选择。国家代码可以以 + 开头,但这也不是必需的。

<a href="tel:+01-562-867-5309">1-562-867-5309</a>

搜索引擎优化

SEO 专家可能比我更有发言权,但 Google 提供了 本地企业结构化数据格式,使用它可以让爬虫更好地识别电话链接,并在搜索结果页面上对其进行格式化,以使号码更易于操作。Dudley Storey 提供了 一个很好的概述,其中包含以下示例

<div itemscope itemtype="http://schema.org/LocalBusiness">
  <h1 itemprop="name">Beach Bunny Swimwear</h1>
  Phone: 
    <span itemprop="telephone">
      <a href="tel:+18506484200">
         850-648-4200
      </a>
    </span>
</div>

另一方面,如果您希望搜索引擎不跟踪电话链接,可以添加 rel="nofollow" 来阻止链接被跟踪和索引。对于未被指定为号召性用语的任何链接,这可能是一个好主意,因为网络爬虫可能会倾向于尝试跟踪它到无处可去的地方。

<a href="tel:+01-562-867-5309" rel="nofollow">1-562-867-5309</a>

在 iOS 中关闭号码检测

如果您打算将电话链接添加到您的标记中,那么您可能还想考虑禁用 iOS 自动检测电话号码并覆盖您的样式。将以下内容添加到文档 <head> 中以关闭该功能

<meta name="format-detection" content="telephone=no">

进一步阅读