Html 既然Chrome没有通过标准测试,如何测试触摸事件?

Html 既然Chrome没有通过标准测试,如何测试触摸事件?,html,touch,modernizr,Html,Touch,Modernizr,我过去依靠 var supportsTouch = 'ontouchstart' in document; 测试移动和桌面浏览器中的触摸支持。基于该测试,我将eventListeners绑定到单击或触摸事件。这在所有当前的浏览器版本中都可以正常工作,但Chrome Canary的最新更新(24.0.1275.0 Canary)以及开发版本没有通过此测试 我检查了当前的modernizr测试,但也返回了假阳性,这意味着它表明chrome支持触摸,即使该功能被禁用 我目前的解决方法是首先测试任何类

我过去依靠

var supportsTouch = 'ontouchstart' in document;
测试移动和桌面浏览器中的触摸支持。基于该测试,我将eventListeners绑定到单击或触摸事件。这在所有当前的浏览器版本中都可以正常工作,但Chrome Canary的最新更新(24.0.1275.0 Canary)以及开发版本没有通过此测试

我检查了当前的modernizr测试,但也返回了假阳性,这意味着它表明chrome支持触摸,即使该功能被禁用


我目前的解决方法是首先测试任何类型的移动浏览器,只有当返回肯定值时,才使用上述测试来检查触摸。这样做的缺点是,您无法在chrome的开发工具中使用方便的“模拟触摸事件”选项。想法?

简短回答:您的测试现在将在任何当前的Chrome中再次运行。但可能不会永远

长答案:

Chrome团队希望将触控事件添加到桌面浏览器中,因为越来越多的桌面具有触控功能。所以他们做到了——大概是在24.0金丝雀时代。然后他们发现很多人都在做你正在做的“检测触摸设备”。问题是您只测试浏览器是否支持触摸事件,而不是设备(这同样适用于
Modernizer.touch
)。更具体地说,就是这个

他们不想为触摸屏/非触摸屏提供不同版本的Chrome,所以他们这样做是为了只有在启动时检测到触摸屏设备时才启用触摸屏API(这里讨论:)

所以现在你的测试又能正常工作了但是-如果你想证明自己的未来,你可能需要改变你的方法。原因如下:

  • 并非所有浏览器都会像Chrome那样执行此切换

  • 触摸功能正在成为一种动态功能:使用Microsoft Surface等,您可以从键盘和鼠标上拔下插头,只进行触摸,用户可以通过KVM开关连接触摸显示器,启动时不会检测到,浏览器供应商不想让API出现和消失——那将是一场噩梦——因此在某个时候,Chrome的家伙可能会在所有设备上永久启用TouchEvents API。该测试将再次抛出“假阳性”

  • 相反,请看,它为鼠标、触摸和手写笔输入提供了一个通用的事件界面。如果你正在考虑为触摸界面等制作更大的按钮,那么也有一个规范(和一个规范),这将很快出现在浏览器中-这将区分不同精度的输入设备-
    /
    粗略
    /
    精细
    -动态将允许您根据连接的指针设备调整样式,因为它们已连接/断开。很酷

    Modernizr v3.0(将在未来几周内推出)将在此处进行一些相关更改:

    • 正在添加PointerEvents API的检测
    • modernizer.touch
      将被重命名为
      modernizer.touchevents
      ,以更好地表达其含义

    <> P>所以如果有可用的话,我会考虑使用PyTrEnter(它已经在IE10中),如果不支持,则返回到
    Modernizer.touchevents
    开关。

    您是说当浏览器支持触摸时返回false,还是说当浏览器支持触摸时返回true,但可能没有触摸硬件?@SamuelEdwinWard我澄清了这个问题,我想仅仅绑定两个事件是行不通的。是的,我知道chromium bug报告——是我自己写的。感谢您花时间写这篇文章,因为上个月我实际上没有签入更改,或者soI花了几个小时试图为surface tablet+IE10修复我的HTML5视频播放器,但指针事件没有按预期工作。只要使用鼠标,一切都很好,但触摸并不能按预期识别。。。似乎IE10无法像人们期望的那样优雅地处理触摸。回到ol'IE6的感觉部分:/我希望这会有所改善。。。微软真的在加强他们的触摸技术,包括可以处理80多个触摸点的协作显示器(出于某种原因)。我相信他们知道,如果不符合标准,它就洗不干净。