Ho un documento HTML5 che utilizza le query multimediali. Per soddisfare gli utenti di browser meno recenti stavo solo cercando di emulare il comportamento in JS e utilizzare modernizr 2.5.3 (il file che ho ricevuto dal download HTML5 Boilerplate ieri) per fare il mq-testing.modernizr 2.5.3 test dell'interrogazione dei media interrompe la pagina in IE e Opera
Un'altra cosa che mi piacerebbe fare è cambiare leggermente l'interfaccia utente se il client supporta gli eventi di tocco usando semplicemente Modernizr.touch
.
faccio questo modo seguente:
//$window is $(window)
if ($window.width() < 575 || Modernizr.touch){
//change UI layout a little
}
if (Modernizr.touch){
//enable tap-navigation for touch devices
}
if (!Modernizr.mq('only all and (min-width: 575px)')){ //fix non-media query browsers
$window.resize(function(){
if ($window.width() < 575){
//add CSS
} else {
//remove CSS
}).trigger('resize');
}
Questo funziona bene in Webkit (mobile e desktop) e Firefox, ma quando provo ad aprire la pagina in Opera (11.6) o Internet Explorer (7 a 9) si scatena l'inferno. Gli eventi spareranno un numero casuale di volte, le animazioni jQuery si fermeranno a metà strada, per essere sinceri non ho idea di cosa potrebbe accadere (nessun errore di console però). Quando rimuovo lo script modernizr all'inizio della mia pagina, funziona perfettamente (tranne che per il rilevamento delle funzioni, ovviamente ...).
Quello che sto anche facendo sta usando il html5shiv
(sto caricando questo dopo il Modernizr, ma ancora in testa) come:
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
avevo il sospetto che questo è il colpevole in il caso IE si rompe, ma poiché questo non dovrebbe avere alcun effetto sul comportamento di Opera, sono un po 'incapace.
Sto facendo qualcosa di sbagliato o si tratta di una specie di bug e dovrei cercare un altro modo per eseguire il rilevamento delle funzioni?
EDIT:
Mentre sto cercando di scoprire che cosa sta succedendo ho scoperto quanto segue: Quello che sembra essere radice di ogni male è solo la prova di media query: Modernizr.mq('only all and (min-width: 575px)')
. Non appena si chiamano le cose impazziscono. Posso inserire questo nella console e otterrò il risultato giusto, ma sembra spezzare qualcosa in qualche modo strano. Inoltre, posso rompere una pagina in esecuzione (che non l'ha chiamata prima) chiamandola dalla console.
EDIT No. 2:
Durante la ricerca di un modo alternativo di gestire i test caratteristica che ho trovato this library sopra a Dev.Opera che (wow!) Sembra funzionare bene in Opera. Eppure non funziona in IE (Webkit e Firefox vanno bene) in quanto si lamenta:
style.innerText = '@media ' + str + ' { #'+id+' { display:none !important; } }';
Meh.
EDIT No. 3:
Così ho appena declassato a Modernizr 2.0.6 e le cose stanno funzionando bene in tutti i browser oggi. Anche se non sono ancora sicuro se questo è un bug o sto facendo qualcosa di sbagliato, quindi preferisco aspettare un po 'di tempo prima di rispondere a me stesso.
Sto avendo lo stesso problema ESATTAMENTE. Quando uso Modernizr.mq(), perdo tutte le mie funzionalità nella pagina, solo in IE. (non testare l'opera). Inoltre non vedo errori nella console. –
@EdCharbeneau ha fatto un downgrade per aiutarti? Ha funzionato perfettamente per me – m90
Io uso un'altra libreria che ha una dipendenza da modernizr quindi non volevo effettuare il downgrade e rischiare di rompere qualcos'altro. Ho dato una risposta qui sotto che ha risolto il problema per me, purtroppo mi ha dato ancora un'altra dipendenza. Non sono felice, ma è open source, devi prendere il buono w/il cattivo. –