PC上的谷歌浏览器在document.createEvent(“TouchEvent”)上取得了成功......?

时间:2012-02-13 19:27:15

标签: jquery silverlight google-chrome tablet

此代码段用于工作。我认为谷歌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更新中将地毯拉到我的下方?

1 个答案:

答案 0 :(得分:5)

是的,Chrome 17和18中有一些变化使得该测试不起作用,但它在19中再次起作用。但是,面对浏览器选择表达的许多不同方式,该测试可能不够强大他们对触摸的支持。

modernizr人对此进行了大量研究,其中包括数百种浏览器,移动设备和桌面版本的结果:

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

我的理解是,无论好坏(大多数情况下更糟),都没有寻找支持的灵丹妙药(或者甚至是某天商定的标准方式)。

modernizr检测支持的主要方式是

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

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

所以,我至少会考虑切换到ontouchstart的测试(在browsecope列表中看起来最接近正确),但是,如果你真的想要做对,我会使用modernizr。