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

Jon*_*sch 31 javascript

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

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

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

Pau*_*ish 12

我没有看到一个明显的方式来看到sms:tel:链接得到特殊待遇.

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


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

  • 使用其中两个链接和常规http链接创建一个测试页面
  • 抓取元素,然后遍历所有属性,将其全部复制到对象..
  • 还可以getComputedStyle获取有关它们的大量详细信息,并将其放入对象中
  • JSON.stringify(那些东西,所以你以后可以处理它)

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

然后JSON.parse他们回到对象...并使用https://github.com/NV/objectDiff.js看看你是否能发现任何差异.

  • 下次撇开亵渎.这是不必要的,表明智商在-273.15 C以南的某个地方徘徊 (6认同)
  • 仅供参考,我花了相当多的时间做这件事.我已经比较了getComputedStyle属性,DOM元素属性,甚至是单击事件属性,并且在常规,mailto,tel和sms链接之间没有发现可辨别的差异(跨移动Safari,Chrome和Firefox,以及桌面Safari,Chrome和Firefox).这是一个好主意,但最终没有结果.只是想让任何人都知道谁遇到了这个问题,因为通过这个过程来测试它并不是一项微不足道的任务. (4认同)
  • 老兄,他是保罗爱尔兰人.他可能会将您复制并粘贴的大部分代码写入您的网站.如果他愿意,他可以在互联网上做一些快活的咒骂. (2认同)

rwd*_*sco 5

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

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

自Yosemite 10.9.2以来的Mac OSX支持使用Facetime音频进行点击呼叫,而Windows 8/IE11则使用Skype进行同样的支持.不确定Chrome操作系统(环聊?).iPad使用Facetime音频通话.

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

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

现在我的方法是:

  • A)将其保留为所有用户的链接.没有支持呼叫功能的浏览器的用户将不得不忍受痛苦
  • B)使用媒体查询隐藏仅桌面浏览器宽度的链接样式,假设大多数桌面用户无论如何都不打算从他们的台式PC拨打电话.
  • C)跳过<a>标签和桌面干脆让自动检测做在移动设备上的链接魔术

我对这些解决方案中的任何一个都不是很疯狂,但是我会选择B,直到浏览器支持格局在未来发生变化.这样我可以控制<a>标签,桌面用户仍然可以点击电话#如果他们真的想要,我将来可以轻松交换.