您可以使用JavaScript检测设备是否具有电话功能(例如,它可以拨打语音电话/短信)吗?

时间:2011-08-03 18:58:41

标签: javascript

有没有办法检测移动设备是否能够拨打语音电话/短信?

在网页中应用tel:sms:链接时,这一点非常重要。仅仅检测手机是不够的,因为平板电脑无法拨打电话,iTouch无法拨打电话等。

我对使用设备大小,UA字符串检测等的移动检测黑客不感兴趣。我想使用功能检测来确定设备是否能够进行语音呼叫/ SMS短信。我喜欢通用解决方案,但我主要对iOS / Android感兴趣。

2 个答案:

答案 0 :(得分:12)

我还没有看到一种明显的方法可以看到sms:tel:链接得到特殊处理。

更新:下面的@janogosteve已确认目前没有可靠的功能检测。这看起来无法察觉。


这是检查此功能检测的综合方法。 (阅读下面的jangosteve评论!)

  • 制作包含其中两个链接和常规http链接的测试页
  • 抓取元素,然后遍历所有属性,将其全部复制到对象..
  • getComputedStyle获取有关它们的详细信息,并将其投入到对象中
  • JSON.stringify(这些东西让你以后可以处理它)

在iOS设备和桌面Safari / Chrome中执行上述操作

然后JSON.parse他们回到对象中...并使用https://github.com/NV/objectDiff.js来查看是否可以发现任何差异。

答案 1 :(得分:5)

此问题的新情节(截至2015年2月)是许多桌面浏览器现在支持点击通话,但是它们不会自动检测电话号码。

因此,为了嗅出电话号码自动检测或触控功能而漂浮的漂亮技巧现在已经过时了。

Mac OSX,因为Yosemite 10.9.2支持使用Facetime音频的点击呼叫,而Windows 8 / IE11使用Skype也是如此。不确定Chrome操作系统(环聊?)。 iPad使用Facetime音频通话。

从现在开始,所有网络浏览器都支持点击通话。问题是如何防止旧版浏览器和桌面操作系统用户在点击tel:链接时出错。

我创建了一个Javascript库,试图检测tel:链接支持之前的旧桌面操作系统用户,但事实证明这是非常有问题和复杂的。

现在我的方法是:

  • A)将其保留为所有用户的链接。没有支持呼叫功能的浏览器的用户将不得不忍受
  • B)使用媒体查询隐藏仅桌面浏览器宽度的链接样式,假设大多数桌面用户不会是 无论如何都要从台式电脑拨打电话。
  • C)完全跳过<a>代码和桌面,让自动检测功能在移动设备上实现链接魔力

我对这些解决方案并不感到骄傲,但我选择了B,直到浏览器支持格局在未来发生变化。这样我可以控制<a>标签,桌面用户仍然可以点击手机#,如果他们真的想要,我将来可以轻松交换。