Maison >interface Web >js tutoriel >Testez la compatibilité du navigateur IE avec AngularJS_AngularJS de JavaScript
Version courte
Pour vous assurer que les applications Angular peuvent fonctionner sur IE, veuillez confirmer :
1. Polyfill JSON.stringify sur IE7 ou version antérieure. Vous pouvez utiliser JSON2 ou JSON3 pour les polyfills.
<!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. Ajoutez id="ng-app" à l'élément racine au point de connexion et utilisez l'attribut ng-app
<!doctype html> <html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName"> ... </html>
3. Vous ne pouvez pas utiliser de balises d'éléments personnalisées telles que cbe1678e5ddae3bab5a303561ac9ed86 (utilisez plutôt l'attribut version 08c7689d8bf8fe33141f270e3fd6c1d5) ou
.4. Si vous devez utiliser des balises d'éléments personnalisées, vous devez suivre les étapes suivantes pour vous assurer qu'IE8 et les versions antérieures peuvent être utilisées :
<!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. Utilisez la balise ng-style au lieu de style="{{ someCss }}". Les versions ultérieures fonctionneront sous Chrome et Firefox mais pas les versions IE
La partie importante est :
Informations sur la version
IE a beaucoup de problèmes avec les éléments de balises non standard. Ces problèmes peuvent être divisés en deux grandes catégories, chacune ayant ses propres solutions.
Bonne nouvelle
La bonne nouvelle est que ces restrictions s'appliquent uniquement aux noms de balises d'éléments et non aux noms d'attributs d'éléments. Par conséquent, aucun traitement spécial n'est requis dans IE : ee9aa6fc82bf3c8d8eeb270a32331a7216b28748ea4df4d9c2150843fecfba68
Que se passera-t-il si je ne le fais pas ?
Si vous utilisez la balise HTML inconnue mytag (les résultats de my:tag ou my-tag sont les mêmes) :
<html> <body> <mytag>some text</mytag> </body> </html>
devrait analyser le DOM suivant :
#document +- HTML +- BODY +- mytag +- #text: some text
Le comportement attendu est que l'élément BODY a un élément enfant mytag avec du texte.
Mais ce n'est pas le cas dans IE (si la révision ci-dessus n'est pas incluse)
#document +- HTML +- BODY +- mytag +- #text: some text +- /mytag
Dans IE, l'élément BODY a trois éléments enfants :
1, un mytag à fermeture automatique. Par exemple, la balise à fermeture automatique 076402276aae5dbec7f672f8f4e5cc81. / est facultatif, mais la balise 0c6dc11e160d3b678d68754cc175188a ne peut pas avoir d'éléments enfants. Le navigateur traite 0c6dc11e160d3b678d68754cc175188acertains textes0b9f73f8e206867bd1f5dc5957dbcb38 comme trois balises sœurs, tandis que certains textes ne sont pas des éléments enfants.
2, un nœud de texte du texte. Dans ce qui précède, cela devrait être un élément enfant de mytag, pas une balise frère
3. Un /mytag à fermeture automatique corrompu. Il s'agit d'un élément cassé car les caractères / ne sont pas autorisés dans les noms d'éléments. De plus, cet élément sous-fermé ne fait pas partie du DOM, il sert uniquement à décrire la structure du DOM.
Nom des balises personnalisées de style CSS
Pour garantir que les sélecteurs CSS peuvent fonctionner sur des éléments personnalisés, le nom de l'élément personnalisé doit être créé à l'avance à l'aide de document.createElement('my-tag'), quel que soit l'espace de noms XML.
<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>