JavaScript,检测触摸设备

4

我正在使用此函数来检测设备是否为触控设备:

function is_touch_device()
{
    return !!('ontouchstart' in window) || !!('onmsgesturechange' in window);
};

我从这里找到了这个函数:如何使用JavaScript检测“触摸屏”设备的最佳方法?

但是自从Chrome 25(25.0.1364)以后,它会在我的桌面上返回true,而我的桌面并不是一个触摸设备。 此外,我已经将IE9升级到IE10,并且它在IE中也返回true!

我搜索了一些内容,但除了使用像这样的工具之外,没有找到有用的东西:http://detectmobilebrowsers.com/

你有什么建议吗?

期待您的回复!

5个回答

4
代码可以正常运行,浏览器可以理解触摸事件,只是因为您的屏幕不可触摸并不意味着浏览器不支持该功能。你想要测试的是硬件能力,这是无法真正测试的。但你可以通过其他方式来判断用户是否正在使用触摸界面,例如这篇文章中描述的方法,或者许多更大型的库如Modernizer所使用的方法。
作为参考,上述文章中实际使用的代码为:
function isTouchDevice() {
   var el = document.createElement('div');
   el.setAttribute('ongesturestart', 'return;');
   if(typeof el.ongesturestart == "function"){
      return true;
   }else {
      return false
   }
}

3

这似乎是有效的:

function isTouchEnabled() { return !!document.createTouch; }

1
谢谢!它在几乎所有设备上都可以运行(FF,IE,Android),除了我Windows桌面上的Chrome。 - Roy

3

Modernizr无法检测到触摸设备,它只能识别支持触摸的浏览器。 - Maciej Paprocki

3

当我从我的笔记本电脑访问我正在努力工作的网站时,我也遇到了一个假阳性的IE10触摸问题。我使用的原始is_touch_device方法基本上是一样的。我修改了该语句的后半部分,改为以下内容:

function is_touch_device()
{
    return !!('ontouchstart' in window) || (!!('onmsgesturechange' in window) && !!window.navigator.maxTouchPoints);
}

window.navigator.maxTouchPoints 看起来是IE10中特有的东西,根据这篇文章:http://msdn.microsoft.com/en-us/library/hh772144(v=vs.85).aspx


0
你可以使用51dergees.mobi 在服务器上检测,适当更改页面视图。它具有HasTouchScreen,IsSmartPhone,IsTablet等属性。

谢谢,但我正在寻找触摸屏检测,而不是设备检测。 - Roy
另外需要注意的是,如果您的网站使用CDN缓存,那么进行服务器端设备检测实际上并不起作用。 - hellatan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接