Как протестировать Touch-Events сейчас, когда Chrome не выполняет стандартные тесты?

Я полагался на

var supportsTouch = 'ontouchstart' in document;

чтобы проверить поддержку касания в мобильных и настольных браузерах. На основе этого теста я связываю eventListeners с кликами или касаниями. Это отлично работает во всех версиях браузера, но последнее обновление для Chrome Canary (24.0.1275.0 канарейки), и, конечно же, версия DEV не прошла этот тест.

Я проверил текущий тест modernizr, но также возвращает ложноположительный результат, что означает, что хром поддерживает touch, даже если функция отключена.

Моим текущим обходным решением является тестирование для любого вида мобильного браузера в первую очередь, и только если это возвращает положительное значение, используйте вышеуказанный тест для проверки касания. Недостатком этого является то, что вы не можете использовать удобные опции "emulate touch events" в хром-dev-инструментах. Идеи?

Ответы

Ответ 1

Короткий ответ: Ваш тест снова будет работать в любой момент Chrome. Но, вероятно, не навсегда.

Длинный ответ:

Команда Chrome хотела добавить сенсорные события в настольные браузеры из-за растущего числа настольных компьютеров с сенсорными экранами. Так они и сделали - вероятно, около 24.0 Канарей. Затем они обнаружили, что множество людей делают то, что вы делаете, чтобы "обнаружить сенсорные устройства". Проблема с этим - , вы только проверяете, поддерживает ли браузер события касания, а не устройство (то же самое относится к Modernizr.touch). Более конкретно, только API W3C/Apple TouchEvents.

Они не хотели отправлять разные версии Chrome для touch/non-touch, поэтому они сделали так, чтобы они включали только сенсорные API, если они обнаруживают сенсорное устройство при запуске (здесь обсуждается: http://code.google.com/p/chromium/issues/detail?id=152149).

Итак, теперь ваш тест снова будет работать... НО - если вы хотите, чтобы вы были уверены в будущем, вы можете изменить свой подход. Вот почему:

  • Не все браузеры будут выполнять этот переключатель, который делает Chrome.

  • Сенсорная способность становится динамичной: с помощью Microsoft Surface и т.д. вы можете отключить клавиатуру и мышь и перейти только touch-touch, у пользователей могут быть сенсорные мониторы, подключенные через KVM-переключатели, которые не будут обнаружены при запуске и т.д. Поставщики браузеров не хотят, чтобы API появлялись и исчезали - это был бы кошмар - поэтому в какой-то момент ребята из Chrome, вероятно, навсегда смогут использовать API TouchEvents на всех устройствах. Этот тест снова начнет металировать "ложные срабатывания".

Вместо этого просмотрите API-интерфейс PointerEvents, который дает общий интерфейс событий для ввода мыши, касания и стилуса. Если вы подумываете о создании кнопок больше для сенсорных интерфейсов и т.д., Там также есть указатель медиа-запросаhover один), который появится в браузерах в ближайшее время - это отличает различную точность входных устройств - none/coarse/fine - и будучи динамическим, позволит вам настроить свои стили на основе подключенного указателя когда они подключены/отключены. Очень круто.

Modernizr v3.0 (в течение следующих нескольких недель) будет иметь несколько важных изменений здесь:

  • Добавляется обнаружение API-интерфейса PointerEvents.
  • Modernizr.touch переименовывается Modernizr.touchevents, чтобы лучше представлять, что это означает

Итак, я бы рассмотрел возможность использования PointerEvents, если он доступен (который уже есть в IE10), возвращаясь к переключателю Modernizr.touchevents, если нет.