Ich habe ein HTML5-Dokument, das Medienabfragen verwendet. Um den Benutzern älterer Browser gerecht zu werden, habe ich gerade versucht, das Verhalten in JS zu emulieren und modernisierer 2.5.3 (die Datei, die ich gestern von der HTML5 Boilerplate heruntergeladen habe) zu verwenden, um die mq-testing zu tun.modernizr 2.5.3 Media Query Tests bricht Seite in IE und Opera
Eine andere Sache, die ich tun möchte, ist die Benutzeroberfläche ein wenig zu ändern, wenn der Client Berührungsereignisse mit einfachen Modernizr.touch
unterstützt.
Ich tue dies auf folgende Weise:
//$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');
}
Dies funktioniert gut in Webkit (mobile und Desktop) und Firefox, aber wenn ich versuche, die Seite in Opera zu öffnen (11.6) oder den Internet Explorer (7 zu 9) die Hölle bricht los. Ereignisse werden eine zufällige Anzahl von Zeit feuern, jQuery Animationen werden auf halbem Weg stoppen, um ehrlich zu sein, habe ich keine Ahnung, was passieren könnte (keine Konsolenfehler obwohl). Wenn ich das modernisier Skript im Kopf meiner Seite entferne, funktioniert es gut (außer für die Feature-Erkennung natürlich ...).
Was ich auch tue, wird mit den html5shiv
(Ich lade diese nach der modernizr, aber immer noch im Kopf) wie:
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
Ich würde vermuten, dass diesen der Täter sein, in Fall IE bricht, aber da dies auf Operas Verhalten keinen Einfluss haben sollte, bin ich ein wenig ratlos.
Mache ich etwas falsch oder ist das eine Art Bug und ich sollte nach einer anderen Möglichkeit suchen, meine Feature-Erkennung durchzuführen?
EDIT:
Während ich um herauszufinden versuche, was ich folgendes herausgefunden geschieht: Was Wurzel allen Übels zu sein scheint, ist nur die Medienabfrage Test: Modernizr.mq('only all and (min-width: 575px)')
. Sobald das heißt, werden die Dinge verrückt. Ich kann das in die Konsole schreiben und werde das richtige Ergebnis bekommen, aber es scheint auf eine seltsame Weise etwas zu kaputt zu machen. Außerdem kann ich eine laufende Seite (die das vorher noch nicht aufgerufen hat) durch einen Aufruf von der Konsole aus unterbrechen.
EDIT No. 2:
Während für eine alternative Art und Weise der Suche der Funktion Test zu handhaben ich this library über bei Dev.Opera festgestellt, dass (wow!) Scheint in Opera zu funktionieren. Aber es funktioniert nicht in IE (Webkit und Firefox sind in Ordnung), wie es beschwert über:
Meh.
EDIT No. 3:
Also ich herabgestuft nur 2.0.6 Modernizr und Dinge arbeiten jetzt in allen Browsern gut. Obwohl ich mir immer noch nicht sicher bin, ob das ein Fehler ist oder ich etwas falsch mache, werde ich lieber etwas warten, bevor ich das selbst beantworte.
Ich habe das gleiche Problem. Wann immer ich Modernizr.mq() verwende, verliere ich alle meine Funktionen auf der Seite, nur in IE. (habe die Oper nicht getestet). Ich sehe auch keine Fehler in der Konsole. –
@EdCharbeneau hat dir ein Downgrade geholfen? Arbeitete perfekt für mich. – m90
Ich benutze eine andere Bibliothek, die von modernizr abhängig ist, also wollte ich nicht herunterstufen und riskiere etwas anderes zu brechen. Ich gab unten eine Antwort, die das Problem für mich behob, leider gab es mir noch eine weitere Abhängigkeit. Ich bin nicht glücklich, aber es ist Open Source, du musst das Gute mit dem Bösen nehmen. –