Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器检测-移动与PC_Javascript_Node.js_Browser Detection - Fatal编程技术网

Javascript 浏览器检测-移动与PC

Javascript 浏览器检测-移动与PC,javascript,node.js,browser-detection,Javascript,Node.js,Browser Detection,所以我读了一些关于浏览器检测和功能检测的文章,我不确定我需要做的事情在讨论的范围内 我有一个游戏网站。人们可以在pc或移动设备上玩游戏。他们还可以配置游戏的工作方式。例如,他们可以通过单击或双击来选择打牌。然而,双击在移动设备上不是一个选项,所以有些人会被卡住,因为他们选择了这个选项,而javascript不起作用 所以我想,我会让人们为移动设备指定一组偏好,为个人电脑指定另一组偏好,并且只提供这些设备上可用的选项。然而,我读到,检测个人电脑和移动设备是一种糟糕的方式 那么,如果我在检测特征,我

所以我读了一些关于浏览器检测和功能检测的文章,我不确定我需要做的事情在讨论的范围内

我有一个游戏网站。人们可以在pc或移动设备上玩游戏。他们还可以配置游戏的工作方式。例如,他们可以通过单击或双击来选择打牌。然而,双击在移动设备上不是一个选项,所以有些人会被卡住,因为他们选择了这个选项,而javascript不起作用

所以我想,我会让人们为移动设备指定一组偏好,为个人电脑指定另一组偏好,并且只提供这些设备上可用的选项。然而,我读到,检测个人电脑和移动设备是一种糟糕的方式


那么,如果我在检测特征,我到底在检测什么?无法检测设备是否专门支持双击,是吗?

您永远无法检测到PC或移动设备在哪里高效地访问您的网站,因为设备太多,而且它们会不断变化。唯一的方法是检查浏览器代理字符串,这非常繁琐;它有成千上万个。此外,它可以被欺骗,所以它不是一个好的信息来源。你能做的最好的事情(包括我在内的许多专业人士都这么做)就是使用功能检测技术——屏幕分辨率、支持的html标记、支持的css属性等等

一个很好的工具是基于功能的Modenizr js库,您可以检查设备是否支持触摸事件,如果支持,则您知道双击将不是您的选项


这里是一些文档的链接

似乎您真正想做的是测试触摸支持,请尝试

一个普遍的建议是:

if (document && document.element && 'ontouchstart' in document.documentElement) {
  ...
}
但这在某些浏览器中可能会失败。一种较长的方法(虽然可能不太准确)是直接测试事件支持:

  /* Feature tests for TouchEvent and GestureEvent modules
   * implemented in Mobile Safari on iPhone
   *
   * The TouchEvent module is a draft (18/08/2008) that supports:
   *
   *   touchstart
   *   touchmove
   *   touchend
   *   touchcancel
   *
   * The GestureEvent module is a draft (18/08/2008)
   * that supports:
   *
   *   gesturestart
   *   gesturechange
   *   gestureend
   *
   * The functions require support for try..catch, introduced
   * in ECMA-262 ed3, JavaScript 1.4 and JScript 5.1.5010.
   * Equates to Navigator 4.0 or later and IE 5.1 or later
   * (http://pointedears.de/scripts/es-matrix/)
   *
   * If W3C DOM 2 Event document.createEvent is supported, 
   * return either true or false,
   * otherwise return undefined.
   */
   function touchSupported() {
     if (document && document.createEvent) {
       try {
         document.createEvent('TouchEvent');
         return true;
       } catch (e) {
         return false;
       }
     }
   }

   function gestureSupported() {
     if (document && document.createEvent) {
       try {
         document.createEvent('GestureEvent');
         return true;
       } catch (e) {
         return false;
       }
     }
   }

它写于2008年,我只在Safari和iPhone上真正使用过它,尽管它似乎在其他地方也能用。彻底测试。

在我看来,您的问题是触摸用户界面与光标用户界面,这不一定与移动设备与PC(可能是桌面)相关。可能提供触摸设置和光标(或指针设备)设置,让用户选择其中一个。所以我这样做了(理论上听起来很正确),但实际上我该怎么做呢?我尝试使用Modernizr.touch来确定某些浏览器是否启用了触摸功能,但它不起作用(或者不能按我预期的方式工作)。我有一个简单的触摸支持功能测试,我会在几个小时后发布。如果可以,我会投反对票,但我没有声誉。我去了Modernizer,我实现了触摸功能检测,现在我的网站非常糟糕。它不起作用了!有很多人在电脑上访问我的网站,Modernizer说他们正在使用触控设备,而事实上他们并没有。我强烈建议人们避免使用Modernizer进行触摸检测!这里有一个例子。这种浏览器/操作系统的组合对触摸屏来说是“真的”,但据我所知,它不是触摸屏设备:(WindowsNT6.2;WOW64)AppleWebKit/537.36(KHTML,像Gecko)Chrome/31.0.1650.57 Safari/537.36好吧,公平地说,我猜Modernizer做的是对的,我只是问了一个错误的问题。我(错误地)认为,拥有触摸设备意味着你不能使用双击。事实上,有些设备同时支持这两种功能。我真正应该做的不是检测触摸设备(如本答案所示),而是检测设备是否支持双击。上面答案中的这句话(我也这么想!)是不正确的,“如果是的话,那么你知道双击对你来说不是一个选项。”因为有些设备同时支持这两种功能。好吧,伙计,抱歉,如果这句话造成了一些混乱,因为它不是100%正确的。但是,我的答案总体上是围绕着这样一个事实演变的:检测设备是荒谬的,更不用说检测它是移动设备还是个人电脑了,因为它没有任何区别。你应该关注的是特征检测。最后,“公平地说”,你应该得到你正在得到的结果,因为你缺乏自己的研究、调查、糟糕的开发和测试技能。你不应该把一些几乎没有经过测试的东西发布到生产中去。天哪,我不会因为功能检测和pc/手机检测的对比而否决投票。我当然同意,也很感激。但是,您给出了一个具体的解决方案建议,即使用Modernizer touch,但这不起作用。当一个解决方案不起作用时,我会这么说,这样以后遇到这个问题的其他人(就像我们自己一样)可以看到讨论和结果。这当然不是人身攻击,我很抱歉你觉得是。