Вы пытались использовать эту функцию? (Это то же самое, что использовал Modernizr.)
function is_touch_device() {
try {
document.createEvent("TouchEvent");
return true;
} catch (e) {
return false;
}
}
ОБНОВЛЕНИЕ 1
document.createEvent("TouchEvent")
начали возвращать true
в последнем хроме ( ст. 17). Modernizr обновил это некоторое время назад. Проверьте тест Модернизра здесь .
Обновите вашу функцию так, чтобы она работала:
function is_touch_device() {
return 'ontouchstart' in window;
}
ОБНОВЛЕНИЕ 2
Я обнаружил, что вышеупомянутое не работает на IE10 (возвращает false на поверхности MS). Вот исправление:
function is_touch_device() {
return 'ontouchstart' in window // works on most browsers
|| 'onmsgesturechange' in window; // works on IE10 with some false positives
};
ОБНОВЛЕНИЕ 3
'onmsgesturechange' in window
вернет true в некоторых версиях IE для настольных ПК, так что это ненадежно. Это работает несколько надежнее:
function is_touch_device() {
return 'ontouchstart' in window // works on most browsers
|| navigator.maxTouchPoints; // works on IE10/11 and Surface
};
ОБНОВЛЕНИЕ 2018
Время идет, и есть новые и лучшие способы проверить это. Я в основном извлек и упростил способ проверки Modernizr'а:
function is_touch_device() {
var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');
var mq = function(query) {
return window.matchMedia(query).matches;
}
if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
return true;
}
// include the 'heartz' as a way to have a non matching MQ to help terminate the join
// https://git.io/vznFH
var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');
return mq(query);
}
Здесь они используют нестандартную touch-enabled
функцию медиазапроса, что, на мой взгляд, является странной и плохой практикой. Но эй, в реальном мире, я думаю, это работает. В будущем (когда они поддерживаются всеми) эти функции медиазапроса могут дать вам те же результаты: pointer
и hover
.
Проверьте источник того, как Модернизр делает это .
Хорошую статью, в которой объясняются проблемы с обнаружением касания, см. В Stu Cox: вы не можете обнаружить сенсорный экран .
Флетчер,
Я не совсем уверен, но если я правильно понял, у вас есть ситуация, более или менее похожая на этот сценарий:
128 ГБ SSD, скажем / dev / sda, с Windows 7
1 Tb HDD, скажем, / dev / sdb, для данных
500 МБ внешнего жесткого диска, скажем, / dev / sdc, изначально для данных, теперь с Ubuntu AND Grub
и вы хотите загрузиться как с Windows, так и с Ubuntu без необходимости выбирать внешний жесткий диск из BIOS.
В этом случае, как насчет переустановки grub на / dev / sda? Я не думаю, что это невозможно.
Приветствия, Сильвия
Вы можете попытаться отключить внешний жесткий диск, а затем посмотреть, загружается ли он. Я предполагаю, что в худшем случае вам придется переписать основную загрузочную запись или что-то подобное, для wandows, но я не знаю, установлены ли ваши окна на твердотельный или терабайтный диск, в любом случае есть несколько способов приблизиться это вы можете зайти на старый диск Windows 7 и запустить командную строку dos и ввести fixboot, или fixmbr, вы можете использовать универсальные версии и делать то же самое, я не так много работал с твердотельными накопителями, поэтому я не могу вам сказать, из опыта, но я думаю, что если вы знаете, как запустить командную строку, у вас все будет в порядке