如何在 tel: URI 中包含扩展名?

Posted

技术标签:

【中文标题】如何在 tel: URI 中包含扩展名?【英文标题】:How do I include extensions in the tel: URI? 【发布时间】:2012-03-17 23:10:36 【问题描述】:

我目前有一个提供电话号码的网页,其中一些电话号码有扩展名,所以我编写了这样的 html

<a href="tel:+44-1234-567;ext=88">+44-1234-56788</a> / <a href="tel:+44-1234-567;ext=99">+44-1234-56799</a

当我在我的 android 浏览器中点击此页面并点击其中一个电话号码时,它会在我的电话拨号器(英国三星 Galaxy s2 股票)中加载为:

+44-1234-567;ext=88

我认为这是不正确的。当然它应该省略;ext=这个词。

我是否误读了实现 tel 的 RFC?

【问题讨论】:

仅仅因为您已正确阅读规范并不意味着电话拨号器已正确实现它。 ☹ 有人在 iPhone 和 Android 上测试过所有这些答案吗?我猜想 90% 以上的点击通话来自相当新的 ios 和 Android 设备。当然,您的网站上可能有 50% 以上的桌面访问者,但这些人可能是手动拨号的。 【参考方案1】:

评论How do I include extensions in the tel: URI?

截至 2021 年 6 月,RFC3966 ;ext= 语法仍未在 Android 中实现,iOS 也不太优雅地实现。

;ext=123为例:

Android:呼叫连接后,会出现一个模式窗口,询问Send the following tones? 396123,带有NoYes 按钮。 “发出以下音调?”是对用户点击Yes 会发生什么的精确技术描述,但对于普通用户而言,这可能不是最好的措辞。 Android 将 ;ext=123 转换为 396123,因为它处理字母的方式与您拨打类似 1-800-FLOWERS 的方式相同,这是语法的错误实现。 iOS 在“断开连接”按钮的左侧提供了一个选项,上面写着Dial “ext=…”。当您点击此“按钮”时,它将拨打分机号码。这是不雅的,而且可用性很差,因为“按钮”看起来不像一个按钮——它只是纯文本——而且你看不到分机号码。 此外,当您第一次在 iOS 中点击电话链接时,它会在屏幕底部显示一个按钮,该按钮将部分电话号码改写为本地格式,但也保留了大部分 ;ext= 语法,例如Call +1 (555) 555-5555;ext123。这也很不雅,而且很丑。

如果您只使用;,它应该表示“等待”,例如“等到自动助理消息结束,然后自动拨打分机号”:

iOS:点击链接会显示一个显示Call +1 (555) 555-5555;123 的按钮,它比上面描述的按钮更丑。 iOs 提供与上述相同的分机拨号“按钮”,但分机号码可见,例如Dial “123”。它仍然存在其他可用性问题。 消息结束后iOS不会自动拨打分机号。 Android:呼叫连接后,会出现一个模式窗口,询问Send the following tones? 123,并带有NoYes 按钮。 Android 不会在消息结束后自动拨打分机号。

所以目前,截至 2021 年 6 月看来,tel: 链接中包含扩展名且实际可行的唯一方法是使用; 来表示“等待”或 , 表示“暂停”

&lt;a href="tel:+1-555-555-5555;123"&gt;555-555-5555 ext. 123&lt;/a&gt; — 这将提供一个 UI 组件,用户可以调用该组件来拨打分机。 UI 组件的可用性取决于操作系统;两者都不是很好,但 Android 可以说更好。 &lt;a href="tel:+1-555-555-5555,123"&gt;555-555-5555 ext. 123&lt;/a&gt; — 这将在呼叫连接几秒钟后自动拨打分机。 注意:此机制不适用于在自动助理消息结束之前不接受用户输入的语音邮件系统。

【讨论】:

【参考方案2】:

我觉得这是一种逃避现实的答案,但如果这还没有在设备上一致地实施,最好不要包含扩展程序,让人们手动拨号:

&lt;a href="tel:+441234567"&gt;+44-1234-567 ext. 88&lt;/a&gt;

&lt;a href="tel:+441234567"&gt;+44-1234-567&lt;/a&gt; ext. 88

让用户做更多的工作比将 1/2 的用户发送到错误的扩展程序更好。

【讨论】:

【参考方案3】:

我没有得到这个问题的答案 - 我认为这是错误的。正确的链接如下所示:

<a href="tel:+441234567,88">+44-1234-567 ext. 88</a>

【讨论】:

这是唯一适用于 Android 和 iOS 的格式【参考方案4】:

对于那些仍然想知道这个问题的人:我发现最好使用这种格式:

<a href="tel:+13235798328;22">

【讨论】:

我喜欢这个问题的每个答案都是完全不同的,哈哈【参考方案5】:

3 个月前的Standards at thenewcode 建议使用微数据暂停。

&lt;a href="tel:+13235798328p22"&gt;

相关: 不同的标准在不同的外部平台上持续存在,并且可能会改变 URI 的处理。 Click to call Google Developers 文档中的功能未指定

例子: 办公室的 Skype uses x to represent extension within skype。

【讨论】:

apple dev 似乎也没有 URI 扩展标准 很好的补充@systemaddict。不幸的是,“p”在我在美国的三星上的 Android v7 上自动转换为数字。【参考方案6】:

根据documentation,你可以添加你想要的像这样12345678;ext=123

见RFC 3966

【讨论】:

为什么这被否决了?它来自 2012 年,但来源有效。 W3.Org 将上述 RFC 3966 视为最广泛支持的方案 w3.org/TR/mwabp/#bp-interaction-uri-schemes【参考方案7】:

似乎正确的做法是使用逗号:

&lt;a href="tel:441234567,88"&gt;+44-1234-567 ext.88&lt;/a&gt;

刚刚在 iPhone 和 Android OS 2.1 上进行了测试。使用 ;ext=88ext 位转换为使用分机拨打的号码(因此它拨打类似 35888 而不是 88)。

【讨论】:

这个答案肯定是错误的,因为您完全删除了“+”。我不明白为什么这么多用户对此表示赞同,请参阅下面的答案以获取正确的版本。【参考方案8】:

在我看到的所有示例中,ext 的值包含在完整的数字中。所以尝试在href 值中包含 88:

<a href="tel:+44-1234-56788;ext=88">+44-1234-56788</a>

【讨论】:

它仍然会告诉您整数的哪一部分对应于扩展名。不过,不知道浏览器将如何处理。我必须检查 RFC。

以上是关于如何在 tel: URI 中包含扩展名?的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 扩展程序 |如何在 CDN 的内容和后台脚本中包含库

如何在 VSCode 扩展包中包含 node_modules 文件夹?

如何在 Adob​​e Air Mobile 的 Android 原生扩展中包含额外的 Jar

如何在 css 中包含 .otf?

如何在 Angular 2 中包含打字稿自定义类型定义?

规则二:方案中包含扩展