Wird es als schlechte Praxis angesehen (und wie schlecht), anderes JavaScript für IE auszuführen? Momentan schreibe ich JavaScript und die einfachste Art, IE-Macken zu umgehen, scheint darin zu bestehen, nach der Browserversion zu suchen und anderen Code auszuführen
var browserName = navigator.appName;
if (browserName == "Microsoft Internet Explorer") {
//Do some stuff
}
else
{
//Do other stuff
}
Es ist schnell und funktioniert gut, führt aber zu einer Duplizierung des Codes und fühlt sich "hacky" an.
javascript
coding-standards
Tom Squires
quelle
quelle
Antworten:
Ja
Das Ableiten von Funktionen aus einer Benutzeragentenzeichenfolge ist ein schwacher und fehleranfälliger Test. Obwohl relativ häufig, würde ich heutzutage sagen, dass dies sicherlich eine schlechte Praxis ist.
Zum Beispiel hat jquery eine Funktion zum Erkennen des von einem Benutzer verwendeten Browsers und ist seit Version 1.3 veraltet
Deshalb: Führen Sie kein UserAgent-Sniffing durch, um zu entscheiden, was der Browser ist oder wozu er in der Lage ist.
Beste Übung
Die anerkannte bewährte Methode zur Behandlung der Unterschiede zwischen den Browserfunktionen ist die Verwendung der Funktionserkennung .
Dafür gibt es einige Bibliotheken, die bekannteste ist wahrscheinlich: Modernizr . Mit Modernizr können Sie Ihr Javascript ganz einfach an die Fähigkeiten eines Browsers anpassen. Es erkennt, was verfügbar ist. Keine Vermutung basierend auf einer UserAgent-Zeichenfolge (außer als letzter Ausweg) und einfaches Hinzufügen von Klassen zum HTML-Tag. Dies macht es nicht nur möglich, verschiedene Fälle in Ihrem js einfach zu behandeln, sondern auch bestimmte Mängel allein mit CSS zu beheben. zB (nur zur Veranschaulichung):
quelle
Es ist in Ordnung, wenn es gültiges JS ist und es keine Abstraktionen gibt
Es ist nicht gerade eine schlechte Praxis, obwohl es besser geworden ist, sind Browser nicht 100% identisch.
Bevor Sie jedoch mit Sonderfällen beginnen, sollten Sie sorgfältig prüfen, ob es sich wirklich um Sonderfälle handelt und nicht nur um Eigenheiten eines anderen Browsers. In diesem Fall sollten Sie nach einer Lösung suchen, die Standards verwendet, die alle Browser gemeinsam nutzen ( caniuse.com ist hierfür eine große Hilfe).
Wenn Sie sicher sind, dass es tatsächlich browserspezifisch ist, sollten Sie imho prüfen, ob Sie eine Bibliothek verwenden können, die dieses Detail vor Ihnen verbirgt. Cross-Browser-Kompatibilität ist eine schwierige Sache. Wenn also jemand es für Sie getan hat, profitieren Sie einfach.
Tu als letztes Mittel, was du tun musst;)
quelle
Wenn mit "einige Dinge tun" "IE-spezifische Einrichtung x verwenden" und mit "andere Dinge tun" "häufigere Einrichtung y verwenden" gemeint ist, ist es besser, nur auf das Vorhandensein von x oder y zu prüfen.
Ich vermute, dass Sie derzeit keine externe Javascript-Bibliothek verwenden. In diesem Fall würde ich prüfen, ob jQuery die Aufgabe unterstützt, die Sie ausführen möchten. Wenn ja, würde ich es benutzen.
quelle
Verwenden Sie die IE-spezifischen Kommentare
<!--[if IE > 6]>...
oder ähnliches. Funktioniert auf allen super beschissenen Browsern IE? -> IE8, aber nicht auf IE9 +, was als Browser als in Ordnung angesehen wird.Unter dem Strich ist es in Ordnung, wenn Sie sich mit einem super beschissenen Browser befassen, der Problemumgehungen benötigt, alles Notwendige zu tun, aber zu vermeiden, dass gut geschriebener Basiscode in einen Hackatron verwandelt wird.
Hoffentlich wird der IE eines Tages verschwinden und Sie können den Hackatron-Code löschen und nur die gut geschriebene Grundlinie belassen.
quelle
Ich denke, es ist besser, diese Art der Entscheidungsfindung auf den Framework-Designer zu verschieben und ein JavaScript-Framework zu verwenden, das diese Art von Komplexität zusammenfasst. Heutzutage haben wir AngularJS, JQuery, ReactJS und so weiter. Wenn Sie Dinge ohne Framework tun, werden Sie diese Art von Schwierigkeiten bekommen.
quelle
Angenommen, Sie möchten tatsächlich JavaScript lernen, ist die beste Vorgehensweise folgende: Bevorzugen Sie das Testen durch Fehlen / Vorhandensein von Methoden und schreiben Sie Normalisierungsfunktionen. Ein total lahmes Beispiel, aber es trifft drei Prinzipien:
Der Vorteil ist, dass Sie dem Browser-Sniffing niemals zu 100% vertrauen können und nie wissen, wann eine andere Bibliothek, mit der verknüpft wird, keine entsprechende Methode für Sie hinzugefügt hat.
Egal, ob Sie nur versuchen, Dinge zu erledigen oder mehr erfahren möchten, ich empfehle JQuery. Es macht einen knallharten Job, indem es die DOM-API-Cruft eliminiert und ein hohes Maß an plattformübergreifender Normalisierung aufrechterhält, aber es ist auch etwas, das Sie ein gutes Stück lernen können, wenn Sie unter der Haube lernen. Noch wichtiger ist, wenn Sie sich die Mühe machen, weiterhin Kern-JS zu lernen, wird es nicht wie so viele andere JS-Frameworks und -Bibliotheken nutzlos und Sie werden weiterhin davon profitieren, dass Sie Ihren JQuery-Junk mit Ihrem verrückten OOP-ish de-suppen können Kompetenzen.
Schauen Sie sich auch quirksmode.org an, um zu verstehen, warum Microsoft für alle IEs vor 9 an der JS-Front wirklich verachtet werden sollte, und um viele Details darüber zu erfahren, wie viel mit der proprietären DOM-API nicht stimmt, und um Vorschläge zur Umgehung zu finden.
quelle