Heim >Web-Frontend >js-Tutorial >Testen Sie die Kompatibilität des IE-Browsers mit AngularJS_AngularJS von JavaScript
Kurzfassung
Um sicherzustellen, dass Angular-Anwendungen im IE funktionieren, bestätigen Sie bitte:
1. Polyfill JSON.stringify auf IE7 oder früher. Sie können JSON2 oder JSON3 für Polyfills verwenden.
<!doctype html> <html xmlns:ng="http://angularjs.org"> <head> <!--[if lte IE 7]> <script src="/path/to/json2.js"></script> <![endif]--> </head> <body> ... </body> </html>
2. Fügen Sie id="ng-app" zum Stammelement am Verbindungspunkt hinzu und verwenden Sie das ng-app-Attribut
<!doctype html> <html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName"> ... </html>
3. Sie können keine benutzerdefinierten Element-Tags wie cbe1678e5ddae3bab5a303561ac9ed86 verwenden (verwenden Sie stattdessen die Attributversion 08c7689d8bf8fe33141f270e3fd6c1d5) oder
4. Wenn Sie benutzerdefinierte Element-Tags verwenden müssen, müssen Sie die folgenden Schritte ausführen, um sicherzustellen, dass IE8 und frühere Versionen verwendet werden können:
<!doctype html> <html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName"> <head> <!--[if lte IE 8]> <script> document.createElement('ng-include'); document.createElement('ng-pluralize'); document.createElement('ng-view'); // Optionally these for CSS document.createElement('ng:include'); document.createElement('ng:pluralize'); document.createElement('ng:view'); </script> <![endif]--> </head> <body> ... </body> </html>
5. Verwenden Sie das ng-style-Tag anstelle von style="{{ someCss }}". Nachfolgende Versionen funktionieren unter Chrome und Firefox, jedoch nicht unter IE-Versionen
Der wichtige Teil ist:
Versionsinformationen
IE hat viele Probleme mit nicht standardmäßigen Tag-Elementen. Diese Probleme können in zwei große Kategorien unterteilt werden, von denen jede ihre eigenen Lösungen bietet.
Gute Nachrichten
Die gute Nachricht ist, dass diese Einschränkungen nur für Element-Tag-Namen gelten und nicht für Element-Attributnamen. Daher ist im IE keine spezielle Verarbeitung erforderlich: ee9aa6fc82bf3c8d8eeb270a32331a7216b28748ea4df4d9c2150843fecfba68
Was passiert, wenn ich es nicht tue?
Wenn Sie das unbekannte HTML-Tag mytag verwenden (die Ergebnisse von my:tag oder my-tag sind die gleichen):
<html> <body> <mytag>some text</mytag> </body> </html>
sollte das folgende DOM analysieren:
#document +- HTML +- BODY +- mytag +- #text: some text
Das erwartete Verhalten besteht darin, dass das BODY-Element ein untergeordnetes mytag-Element mit etwas Text hat.
Aber das ist im IE nicht der Fall (wenn die obige Revision nicht enthalten ist)
#document +- HTML +- BODY +- mytag +- #text: some text +- /mytag
Im IE hat das BODY-Element drei untergeordnete Elemente:
1, ein selbstschließender Mytag. Zum Beispiel das selbstschließende Tag 076402276aae5dbec7f672f8f4e5cc81. / ist optional, aber das 0c6dc11e160d3b678d68754cc175188a-Tag darf keine untergeordneten Elemente haben. Der Browser behandelt 0c6dc11e160d3b678d68754cc175188aeinige Textelemente0b9f73f8e206867bd1f5dc5957dbcb38
2, ein Textknoten, etwas Text. Im obigen Beispiel sollte dies ein untergeordnetes Element von mytag sein, kein Geschwister-Tag
3. Ein beschädigtes selbstschließendes /mytag. Dies ist ein fehlerhaftes Element, da /-Zeichen in Elementnamen nicht zulässig sind. Darüber hinaus ist dieses untergeordnete Element nicht Teil des DOM, sondern wird nur zur Beschreibung der Struktur des DOM verwendet.
Benutzerdefinierte Tag-Benennung im CSS-Stil
Um sicherzustellen, dass CSS-Selektoren auf benutzerdefinierten Elementen funktionieren können, muss der Name des benutzerdefinierten Elements im Voraus mit document.createElement('my-tag') erstellt werden, unabhängig vom XML-Namespace.
<html xmlns:ng="needed for ng: namespace"> <head> <!--[if lte IE 8]> <script> // 需要确认ng-include被正常解析 document.createElement('ng-include'); // 需求启用CSS引用 document.createElement('ng:view'); </script> <![endif]--> <style> ng\:view { display: block; border: 1px solid red; } ng-include { display: block; border: 1px solid blue; } </style> </head> <body> <ng:view></ng:view> <ng-include></ng-include> ... </body> </html>