22

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

<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

4 回答 4

13

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

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

这可能会或可能不会移植到其他平台,您必须尝试一下。

于 2013-06-27T14:45:37.543 回答
2

在将非链接元素增强为电话链接之前,我使用以下方法检测其可能是电话:

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

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

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

于 2013-09-19T01:48:50.797 回答
2

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

这更像是一个假设,未经检验。

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

于 2013-06-27T15:00:37.233 回答
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' );

于 2017-03-18T19:06:54.790 回答