2012-09-24 5 views
10

ho usato per contare suCome testare per Touch-Events ora che Chrome non supera i test standard?

var supportsTouch = 'ontouchstart' in document; 

per verificare supporto touch nel browser per dispositivi mobili e desktop. Sulla base di tale test, lego gli EventListeners agli eventi click o touch. Funziona bene in TUTTE le versioni attuali del browser, ma l'ultimo aggiornamento a Chrome Canary (canarino 24.0.1275.0) e, naturalmente, la versione DEV non ha superato questo test.

Ho controllato il test di modernizzazione corrente ma restituisco anche un falso positivo, nel senso che indica che il chrome supporta il tocco anche se la funzione è disabilitata.

La mia soluzione attuale è quella di testare per primo qualsiasi tipo di browser mobile e solo se restituisce un risultato positivo utilizza il test precedente per verificare la presenza di un tocco. Il lato negativo di questo è che non è possibile utilizzare la comoda opzione "emulate touch events" negli strumenti di sviluppo di chrome. Idee?

+0

Stai dicendo che restituisce false quando il browser supporta touch o che restituisce true quando il browser supporta il touch ma potrebbe non esserci l'hardware touch? –

+0

@ SamuelEdwinWard Ho chiarito la domanda –

+0

Suppongo che il solo binding di entrambi gli eventi non funzionerà. –

risposta

16

Risposta breve: Il test funzionerà di nuovo ora in qualsiasi corrente di Chrome. Ma probabilmente non per sempre.

Risposta lunga:

Il team di Chrome ha voluto aggiungere eventi touch in browser desktop, a causa del crescente numero di desktop con touch screen-capable. Così fecero - probabilmente intorno al tempo di 24.0 Canary. Hanno poi scoperto che un sacco di persone stavano facendo quello che stai facendo per "rilevare i dispositivi touch". Il problema con questo è che stai testando solo se il browser supporta gli eventi di tocco, non il dispositivo (lo stesso vale per Modernizr.touch). Più nello specifico, solo lo W3C/Apple TouchEvents API.

Non desideravano distribuire versioni diverse di Chrome per touch/non-touch, quindi l'hanno reso in modo tale che abilitino le API touch solo se rilevano un dispositivo touch all'avvio (discusso qui: http://code.google.com/p/chromium/issues/detail?id=152149).

Così ora il tuo test funzionerà di nuovo ... MA - se vuoi te stesso a prova di futuro, potresti voler cambiare approccio. Ecco perché:

  1. Non tutti i browser eseguiranno questo passaggio che fa Chrome.

  2. La capacità di tocco sta diventando una caratteristica dinamica: con Microsoft Surface ecc. È possibile scollegare da tastiera e mouse e passare al solo tocco; gli utenti potrebbero avere monitor tattili collegati tramite switch KVM che non verranno rilevati all'avvio, ecc. I fornitori di browser non vogliono che le API compaiano e scompaiano - sarebbe un incubo - quindi a un certo punto i ragazzi di Chrome probabilmente abiliteranno in modo permanente le API TouchEvents su tutti i dispositivi. Quel test inizierà di nuovo a "falsi positivi".

Invece, guardare il PointerEvents API, che fornisce un'interfaccia evento comune per gli ingressi del mouse, toccare e stilo. Se stai pensando di fare pulsanti più grande per interfacce touch etc, c'è un pointer media query spec troppo (e un hover uno), che apparirà nei browser presto - questa distinzione tra diversi precisioni di dispositivi di input - none/coarse/fine - e essendo dinamico ti consente di regolare i tuoi stili in base ai dispositivi puntatori collegati, poiché sono connessi/disconnessi.Molto bello

Modernizr v3.0 (lasciando cadere nelle prossime settimane) avrà un paio di modifiche rilevanti qui:

  • A rilevare per il PointerEvents API viene aggiunto
  • Modernizr.touch che viene rinominata Modernizr.touchevents al meglio rappresentano ciò che significa

Così mi piacerebbe prendere in considerazione utilizzando PointerEvents se disponibili (che lo è già in IE10), ricadendo a uno switch Modernizr.touchevents se non.

+1

sì, so che il bug bug cromo - lo scrissi da solo. grazie per aver dedicato del tempo a scrivere questo dato che in realtà non ho effettuato il check-in per gli ultimi mesi –

+0

Ho trascorso alcune ore a cercare di riparare il mio lettore video HTML5 per un tablet di superficie + IE10 ma gli Eventi puntatore non funzionano come previsto. Tutto va bene finché si usa il mouse, ma i tocchi non vengono riconosciuti come previsto ... Sembra che IE10 non riesca a trattare i tocchi con la stessa eleganza che ci si potrebbe aspettare. Torna al vecchio IE6 in parte:/ –

+0

Spero che questo migliorerà ... Microsoft sta davvero sfruttando le tecnologie touch, incluse le visualizzazioni collaborative che possono gestire oltre 80 punti di contatto (per qualche motivo). Sono sicuro che sanno che semplicemente non si lava se non è in grado di grattarsi. –

Problemi correlati