108 votes

Quelles sont les raisons typiques pour lesquelles Javascript développé sur Firefox échoue sur Internet Explorer?

J'ai développé un peu de javascript amélioré les pages qui fonctionnent très bien sur les plus récentes de Firefox et Safari. J'ai manqué de vérifier dans Internet Explorer, et maintenant, je trouve que les pages ne fonctionnent pas sous IE 6 et 7 (à ce jour). Les scripts sont en quelque sorte pas exécuté, les pages de montrer que si le javascript n'était pas là, bien que certains le javascript est exécuté. Je suis à l'utilisation de ses propres bibliothèques de manipulation du dom, à partir de YUI 2-je utiliser YUI-Chargeur et le XML-Http-Request, et sur une page j'utilise "psupload", qui dépend de JQuery.

Je suis de l'installation de Microsoft Script Editor à partir de microsoft Office XP et maintenant de débogage. Je vais aussi écrire des tests maintenant.

Ce sont typiques de la faute de points de IE? Quelle direction je peux garder mes yeux ouverts.

J'ai trouvé cette page, qui montre quelques différences: http://www.quirksmode.org/compatibility.html

Pouvez-vous de votre expérience de nom de certaines des choses que je devrais regarder pour la première fois?

Je vais aussi poser plus de questions ici pour des tâches spécifiques plus tard, mais pour l'instant je suis intéressé par votre expérience, pourquoi IE échoue généralement sur des scripts qui fonctionnent très bien dans Firefox

Edit: Merci pour toutes ces excellentes réponses!

En attendant, j'ai adapté le code entier de sorte qu'il fonctionne également avec Internet Explorer. J'ai intégré jQuery et construit mes propres classes sur le dessus de cela maintenant. C'était mon erreur, que je n'ai pas construire tous mes trucs sur jQuery depuis le début. Maintenant que j'ai.

Aussi JSLint m'a beaucoup aidé.

Et beaucoup de simples questions à partir des réponses différentes aidé.

26voto

Luca Rocchi Points 2665

Vérifiez également les virgules telles que celles-ci ou similaires, le cas échéant, dans votre code

 var o={
'name1':'value1',
'name2':'value2',
} 
 

la dernière virgule (valeur suivante2) sera tolérée par Firefox, mais pas IE

12voto

Nick Craver Points 313913

Si vous vous en tenez à l'aide de jQuery ou YUI que votre post est marqué, vous devriez avoir peu de différences entre les navigateurs...c'est ce que les cadres sont pour la, de prendre soin de ces cross-browser différences pour vous.

Pour un exemple, regardez le quirksmode DOM traversée de la page, selon IE ne prend pas en charge la plupart des choses...si cela est vrai, les cadres ne sont, par exemple, IE ne prend pas en charge elem.childElementCount, mais en jQuery: $(elem).children().size() travaille pour obtenir cette valeur, dans chaque navigateur. Vous trouverez il y a quelque chose dans la bibliothèque pour gérer les 99% de la non prise en charge des cas dans les navigateurs, au moins avec le script...avec CSS, vous pourriez avoir à se déplacer vers des plugins pour la bibliothèque, un bon exemple de cela est d'obtenir des coins arrondis de travail dans IE...car il n'a pas de prise en charge de CSS.

Toutefois, si vous commencez à faire les choses directement, comme document.XXX(thing), alors vous n'êtes pas dans la bibliothèque, vous êtes en train de faire du javascript directement (c'est du javascript, mais vous obtenez le point :), et cela pourrait ou ne pourrait pas causer de problèmes, selon la bu de l'équipe IE a été lors de la mise en œuvre de cette fonction particulière.

Avec IE, vous êtes plus susceptibles d'échouer sur le style en sortant à droite de raw javascript, des questions, des animations de quelques pixels de large et ce genre de chose, beaucoup plus-si dans IE6, bien sûr.

10voto

GSto Points 13106

getElementbyID correspondra également à l'attribut name dans IE, mais pas aux autres navigateurs, et IE sélectionnera celui qu'il trouvera en premier.

Exemple:

 <script>
 var foo = document.getElementById('bar');
</script>

....
<input name="bar" type="text" />  //IE will get this element
<span id="bar"> Hello, World! </span>  //FF,Safari,Chrome will get this element
 

5voto

Jakob Points 11155

Il y a des tas de choses, mais un piège dans lequel je tombais était que de nombreux navigateurs acceptent JSON sans noms entre guillemets, alors que ie6 et ie7 ne le font pas.

 { name: "Jakob" } // will often work, but not in ie6/ie7
{ "name": "Jakob" } // Better!
 

Edit : Pour clarifier, il s'agit uniquement d'un problème lorsque JSON est requis, par opposition à un littéral d'objet. JSON est un sous-ensemble de la syntaxe littérale de l'objet et est conçu comme un format d'échange de données (comme XML), c'est pourquoi il est conçu pour être plus précis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X