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

时间:2013-06-27 13:56:15

标签: javascript jquery mobile detection browser-detection

在我的网站上,我有几个这样的链接:

<a href="tel://+12181112222" class="call">218.111.2222</a>

我想使用jQuery(或其他方法)来确定设备是否支持使用tel://协议进行调用。世界上是否存在这种方法?

我想使用一些方法启用或禁用链接,因为当点击桌面时,我们会看到一个页面,例如“Firefox不知道如何打开此地址,因为协议(tel)与任何节目。“

目前,我正在嗅探用户代理并检测它是否是移动设备。但是,有更好/准确的方法吗?像jQuery的$.support.xx

if ( (/iPhone|iPod|iPad|Android|BlackBerry/).test(navigator.userAgent) != true ){
    $(".call").attr("href", "#");
}

4 个答案:

答案 0 :(得分:12)

我不确定Android或黑莓手机,但iOS会自动提取电话号码并将其包装起来:<a href="tel:xxx">xxx</a> ...所以你可以在某处包含一个隐藏的<div>电话号码如1-800-555-5555,然后,在页面加载时执行以下操作:

var isTelephone = $("a[href*='tel:']").length > 0;

这可能是也可能不是可移植到其他平台,你必须尝试。

答案 1 :(得分:2)

有人可能会在其中找到带有tel://的href的第一个实例并发布ajax调用。如果成功,它的readyState应为1,所以什么也不做。失败时,使用tel://查找所有href并获取内部html并替换a标记。

这更像是一种假设而未经过测试。

另一个想法是大多数浏览器都有自定义支持电话号码格式的字符串,如果你放在一个电话号码,你不应该创建一个标签,因为它应该自动完成。

答案 2 :(得分:2)

我正在使用以下内容检测其 PROBABLY 手机,然后再将一个非链接元素添加到tel链接中:

var probablyPhone = (
    (/iphone|android|ie|blackberry|fennec/).test
     (navigator.userAgent.toLowerCase())
     && 'ontouchstart' in document.documentElement
  );

我排除ipod | ipad,因为我知道它们不是手机

这里的关键点是 PROBABLY 它当然会返回真正的一些平板电脑设备,但这足以我的目的在非手机触摸设备上链接将无论如何也会失败 - 我主要只想排除桌面因此触摸事件检测。我想同时检查设备宽度也会缩小范围,但最终无法保证检测到能够拨打我的电话的移动设备。

答案 3 :(得分:1)

某些有限的解决方案可以成为检测某些纯手机的方法。但并非所有可能:

(function(a) {
	window.isPhone = /\bi?Phone\b|(?=.*\bAndroid\b)(?=.*\bMobile\b)|(?=.*\bAndroid\b)(?=.*\bSD4930UR\b)/i.test(a);
})(navigator.userAgent || navigator.vendor || window.opera);

console.info('This device %s make phone calls', window.isPhone ? 'is originally intended to' : 'probably can\'t' );