Google Chrome на ПК успешно работает на document.createEvent ("TouchEvent") ...? - PullRequest
1 голос
/ 13 февраля 2012

Этот фрагмент кода используется для работы. Я думаю, что недавнее обновление 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?

1 Ответ

5 голосов
/ 14 февраля 2012

Да, в Chrome 17 и 18 произошли некоторые изменения, из-за которых этот тест не работал, но он снова работает в 19. Однако этот тест, вероятно, недостаточно надежен, несмотря на то, что браузеры выбирают различные способы выражения их поддержка для прикосновения.

Парни modernizr провели множество исследований по этому вопросу, и получили результаты по многим сотням версий браузеров, мобильных и настольных, здесь:

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

Насколько я понимаю, что, к лучшему или к худшему (в основном к худшему), не существует серебряной пули для обнаружения поддержки (или даже когда-нибудь согласованного стандартного способа сделать это).

Основной способ, с помощью которого modernizr обнаруживает поддержку, -

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

но затем они продолжают вводить элемент с помощью медиа-запроса «с сенсорным включением» и проверяют, дает ли он эффект, чтобы быть уверенным (за ним немного сложно следить, но посмотрите source ).

Итак, я бы по крайней мере подумал о переходе на тестирование ontouchstart (которое выглядит наиболее правым в списке браузеров), но, если вы действительно хотите сделать это правильно, я бы просто использовал modernizr.

...