jquery - PC 上的 Google Chrome 在 document.createEvent ("TouchEvent"处成功)...?

标签 jquery silverlight google-chrome tablet

此代码片段曾经有效。我认为 Google Chrome 最近的更新破坏了它。还有人看到这个吗?

function DenyIfTablet() {
    try {
        document.createEvent("TouchEvent");
        alert("Silverlight not supported on touch-screen devices.");
        window.location = document.referrer;
    }
    catch(exception){ 
        //OK to continue.
    }
}

在 IE9 下,会引发异常并且不会发生警报/重定向。

在 Chrome 17.0.963.43 下,即使我没有使用触摸屏设备,不会抛出异常,并且我会被重定向。

我在这里做了什么不当的事情吗?还是在 Chrome 更新中地毯被拉出了我下面?

最佳答案

是的,Chrome 17 和 18 中发生了一些变化,导致该测试无法正常工作,但在 19 中又可以正常工作。但是,面对浏览器选择的多种不同表达方式,该测试可能不够稳健他们对触摸的支持。

modernizr人们对此进行了大量研究,研究结果涵盖了数百个版本的浏览器、移动设备和桌面设备,如下:

http://modernizr.github.com/Modernizr/touch.html

我的理解是,无论好坏(大多数情况下更糟),都没有检测支持的 Elixir (甚至没有一个商定的标准方法来检测支持)。

modernizr 检测支持的主要方式是

('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch

但随后他们继续注入(inject)一个带有“支持触摸”媒体查询的元素,并测试它是否有效果以更加确定(这有点难以理解,但请查看 source )。

所以,我至少会考虑切换到 ontouchstart 测试(它在该 browserscope 列表中看起来最接近右侧),但是,如果你真的想得到它的正确,我只会使用modernizr。

关于jquery - PC 上的 Google Chrome 在 document.createEvent ("TouchEvent"处成功)...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9266662/

相关文章:

wpf - WPF/Silverlight 依赖属性延迟 "rendering"?

powershell - 自动化 Chrome WebDriver - 使用 PowerShell 和 Selenium 从 DatePicker 中选择日期

google-chrome - 将变量从后台传递到 Chrome 扩展程序上的弹出窗口

javascript - 通过模板字段打开 NavigateUrl 窗口

javascript - 使用非标准事件名称理解 on() 语法

c# - 为什么我不能在 .aspx 中绑定(bind)一个属性,而它在 .xaml 中是可行的

google-chrome - 控制 Chrome 扩展程序中的选项卡

php - 414 请求 URI 太大 - 此浏览器相关吗?

javascript - Javascript 中的总和格式金额返回 NaN

wpf - 如何将 ListBoxItem.IsSelected 绑定(bind)到 bool 数据属性