2015-06-05 2 views
0

Кто-нибудь заметил, что в последней версии Desktop Firefox он признан сенсорным устройством?Последний настольный компьютер Firefox признан сенсорным устройством?

Я использую ниже скрипт:

function isTouch() { 
    try{ document.createEvent("TouchEvent"); return true; } 
    catch(e){ return false; 
} 
} 

if (isTouch()) { 
    alert('I am touch device!') 
} 

Сценарий дал мне безупречные результаты вплоть до последней версии Desktop Firefox. Это ошибка? Я что-то упускаю?

Спасибо всем за ваше время!

Редактировать: False alarm people. Я понятия не имею, что пошло не так, я попробовал сбросить настройки, отключил все расширения, но не повезло.

Я, наконец, решил проблему REFRESHING firefox (потерял все мои расширения, хотя и пришлось переустановить).

Спасибо за все усилия и извините за причиненные неудобства.

+0

Браузер никогда не распознается как устройство! JS API возвращает функции базовой системы, которые могут иметь сенсорный экран (например, современные Thinkpads, в которых есть клавиатура и сенсорный экран). – feeela

+0

Учитывая, что Windows теперь установлена ​​на сенсорных ноутбуках, и что даже Ubuntu в наши дни работает с сенсорными ноутбуками, неудивительно, что настольные браузеры должны активировать сенсорные события. – slebetman

+0

'document.createEvent (« TouchEvent »)'> 'NotSupportError: операция не поддерживается', FF 38.05 – Anthony

ответ

1

Вы просто проверяете, можете ли вы создать определенный тип события, а не действительно, если вы в настоящее время находитесь на сенсорном устройстве.

Вот более полная функция isTouchDevice, которую я написал некоторое время назад на основе ядра Modernizr.

/** 
* Detect if the current device is a touch device. 
* Inspired by Modernizr and hardcore streamlined. 
*/ 
function isTouchDevice() { 
    var bool; 
    if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) { 
     bool = true; 
    } 
    else { 
     var fakeBody = document.createElement('fakebody'); 
     fakeBody.innerHTML += '<style>@media (touch-enabled),(-webkit-touch-enabled),(-moz-touch-enabled),(-o-touch-enabled){#touchtest{top:42px;position:absolute}}</style>'; 
     document.documentElement.appendChild(fakeBody); 

     var touchTestNode = document.createElement('div'); 
     touchTestNode.id = 'touchtest'; 
     fakeBody.appendChild(touchTestNode); 
     bool = touchTestNode.offsetTop === 42; 
    } 
    return bool; 
} 
+0

Спасибо! Будет тест! @feeela, он правильно распознает все виды устройств? Включая ноутбуки с сенсорным экраном и т. Д.? – scooterlord

+0

используя 'документ.createEvent («TouchEvent») 'возвращает ошибку в последнем FF, поэтому, хотя этот скрипт может быть более полным, я подозреваю, что он все равно вернет true для тестов OPs, поскольку они, вероятно, имеют Touch-устройство и не знают. – Anthony

+0

@ Тест Энтони на моем рабочем столе, как я всегда делал. – scooterlord

1

У меня была аналогичная проблема, и, возможно, некоторые люди извлекут выгоду из информации.

В моем случае события Touch всегда были обнаружены как положительные от Modernizr на рабочем столе Firefox, даже если они не были уволены.

В конце концов, я понял, что «dom.w3c_touch_events.enabled» имеет значение «1», даже если я сам его не установил. Фактически он был включен кнопкой «Touch» в «Ревизионном дизайне», но никогда не переключился на «0» даже после отключения сенсорных событий с помощью той же самой кнопки.

Так что я сообщил об ошибке в Mozilla: https://bugzilla.mozilla.org/show_bug.cgi?id=1188270

Вы найдете тестовый случай есть.

В принципе, единственным решением, которое я должен был вернуться к нормальной работе, является изменение вручную значения «dom.w3c_touch_events.enabled» на «0» в «about: config». И теперь я знаю, что включив события Touch в Ревизионном дизайне, мне придется вручную переключить его обратно.

Надеюсь, это поможет некоторым людям!

Смежные вопросы