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/

你有什么建议吗?

我期待着您的回复!

4

5 回答 5

4

代码工作得很好,浏览器能够理解触摸事件,仅仅因为您的屏幕不可触摸并不意味着浏览器不支持该功能。您要测试的是无法真正测试的硬件功能。您总是可以使用不同的方法来查看用户在触摸一次后是否实际使用触摸界面,例如本文描述的,或者大型库使用的许多其他方法,例如 Modernizer。

作为参考,上面文章中实际使用的代码是:

function isTouchDevice() {
   var el = document.createElement('div');
   el.setAttribute('ongesturestart', 'return;');
   if(typeof el.ongesturestart == "function"){
      return true;
   }else {
      return false
   }
}
于 2013-04-16T17:50:23.437 回答
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

于 2013-10-05T18:31:01.503 回答
3

您可以使用Modernizr来检测触摸功能。

这个问题非常类似于What's the best way to detect a 'touch screen' device using JavaScript? 也许应该被认为是重复的。

于 2013-06-12T11:04:33.973 回答
3

这似乎有效:

function isTouchEnabled() { return !!document.createTouch; }
于 2013-03-05T12:39:14.800 回答
0

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

于 2013-07-15T08:40:38.500 回答