Javascript, обнаружение сенсорных устройств
Я использую эту функцию, чтобы определить, является ли устройство сенсорным:
function is_touch_device()
{
return !!('ontouchstart' in window) || !!('onmsgesturechange' in window);
};
Получил эту функцию отсюда: Каков наилучший способ обнаружить устройство с сенсорным экраном с помощью JavaScript?
Но начиная с Chrome 25 (25.0.1364), на моем рабочем столе возвращается true, который не является сенсорным устройством. Также я обновил IE9 до IE10, и он возвращает true в IE!
Обыскал, но не смог найти ничего полезного, чтобы исправить это, кроме как использовать что-то вроде этого: http://detectmobilebrowsers.com/
Что вы порекомендуете?
Я с нетерпением жду ваших ответов!
5 ответов
Код работает просто отлично, браузер может понимать сенсорные события, просто потому, что ваш экран не сенсорный, не означает, что браузер не поддерживает функциональность. Что вы хотите проверить, так это аппаратные возможности, которые на самом деле не поддаются тестированию. Вы всегда можете использовать различные способы, чтобы увидеть, действительно ли пользователь использует сенсорный интерфейс после одного прикосновения к нему, как описано в этой статье, или многих других, которые используют более крупные библиотеки, например Modernizer.
В качестве ссылки код, фактически используемый в статье выше:
function isTouchDevice() {
var el = document.createElement('div');
el.setAttribute('ongesturestart', 'return;');
if(typeof el.ongesturestart == "function"){
return true;
}else {
return false
}
}
Это похоже на работу:
function isTouchEnabled() { return !!document.createTouch; }
Вы можете использовать Modernizr для обнаружения сенсорных способностей.
Этот вопрос очень похож на вопрос " Как лучше всего обнаружить устройство с сенсорным экраном" с помощью JavaScript? и, возможно, следует считать дубликатом.
У меня также возникла ложная положительная проблема касания IE10, когда я посещал сайт, над которым я работал, со своего ноутбука. Оригинал is_touch_device
Метод, я использовал в основном то же самое. Я изменил вторую половину этого заявления, чтобы быть следующим:
function is_touch_device()
{
return !!('ontouchstart' in window) || (!!('onmsgesturechange' in window) && !!window.navigator.maxTouchPoints);
}
window.navigator.maxTouchPoints
Кажется, что-то конкретное в IE10 основано на этом посте: http://msdn.microsoft.com/en-us/library/hh772144(v=vs.85).aspx
Вы можете использовать http://51degrees.mobi/ для обнаружения на сервере надлежащим образом изменяющегося вида страницы. Имеет свойства HasTouchScreen, IsSmartPhone, IsTablet и т. Д.