如何在 Web 应用程序中检测 tel: uri 方案的可用性?

Posted

技术标签:

【中文标题】如何在 Web 应用程序中检测 tel: uri 方案的可用性?【英文标题】:How do I detect availability of tel: uri scheme in a web app? 【发布时间】:2011-07-01 17:26:10 【问题描述】:

我希望使用 tel: uri 方案 (rfc3966) 使电话号码可在 Web 应用程序中的移动设备上链接,但我不想将它们链接到无法处理 tel: 方案的设备上- 没有电话功能的台式机或移动设备(例如 iPad!)

有什么方法可以检测到这一点吗?如果可能的话,我宁愿避免用户代理嗅探。

iPhone 似乎有一个 canOpenURL 函数,应用程序可以使用它来测试它,但我想从 javascript 中获得相同的行为。

【问题讨论】:

【参考方案1】:

没有检测浏览器对 tel URI 方案支持的标准方法。

但是您可以使用用户代理嗅探库,例如优秀的WURFL library 可以检测到此功能。

【讨论】:

您想知道这种情况在过去一年中是否发生了很大变化? (我怀疑不是。)谢谢你的回答。 据我所知,如果能看到某种 JavaScript 支持来检测这一点会很高兴。最好的办法是将电话号码放在页面上,并希望电话将其解释为电话号码并将其转换为 tel: 链接的版本。 是的,虽然丑陋的部分不仅在于它在手机上是否有用,还在于桌面浏览器是否会做一些笨拙的事情。 Desktop Firefox 为用户提供了一个很好的对话框,解释 URL 方案无法识别,这当然完全浪费在普通人只是看一个页面上。再次,谢谢! User-Agent 嗅探不是答案,用户代理字符串无法确定设备是否具有该功能,根本没有提供足够的信息。是否安装了 Skype,这个 android 设备是平板电脑还是在电脑上运行?【参考方案2】:

iPhone 会自动识别普通文本是否为电话号码格式,并将其转换为可点击的链接。您无需付出任何努力。

ie 如果您的网站上有文本“+61 (0)7 3000 0000”,iPhone 会知道它是一个数字并将其设为链接。

【讨论】:

其他移动开发者告诉我,最好关闭此功能,因为它往往会积极地将其他内容变成可点击的链接 - 例如邮政编码、邮政信箱和其他长字符串数字。该建议可能已过时 - 任何人都知道这是否仍然是一个问题? @Korny 这是一个问题/功能,取决于您认为它有多有用。可以使用<meta name="format-detection" content="telephone=no"> 将其禁用【参考方案3】:

MobileESP 项目具有适用于多种服务器端语言的 API,以及客户端 JavaScript API。

哦!而且它是免费和开源的(我相信是 Apache 许可证)

【讨论】:

这基本上是用户代理嗅探。

以上是关于如何在 Web 应用程序中检测 tel: uri 方案的可用性?的主要内容,如果未能解决你的问题,请参考以下文章

添加 # 使用 Url_launcher 登录 tel uri

“tel”uri的Regex

URI 处理:从浏览器链接启动 Lync

如何检测shiro是不是允许uri或从uri中提取控制器名称

使用jQuery检测设备是不是可以拨打电话(支持“tel://”协议)

“href:tel”链接不会在 IOS 中打开警报视图