2008-12-11 6 views
20

Je vois beaucoup d'erreurs Javascript dans IE8 sur les pages qui ont bien fonctionné dans IE7 (et Firefox, Chrome et Safari). Je sais que IE a apporté quelques modifications à des choses comme la sécurité Javascript. Certains d'entre eux ne donnent pas de messages d'erreur clairs - des choses comme des violations inter-domaines peuvent finir par émettre des exceptions très vagues.Quelles sont les causes les plus probables des erreurs Javascript dans IE8?

Faisons une liste des meilleurs contrevenants lorsque nous cherchons à résoudre les erreurs JavaScript IE8. S'il vous plaît liste un changer à la façon IE8 Javascript qui provoquerait une erreur Javascript.

Répondre

13

Je peux vérifier que ceux postés par "unique_username" sont précis!

(quote) En fait, une tonne de choses a changé. Tout d'abord, cela dépend vraiment du mode dans lequel vous vous trouvez. Dans IE8, il y a 3 (TROIS) modes.

  • IE5 Quirks - votre page n'a pas doctype, la page rend comme IE5 a fait
  • IE 7 Normes du mode - vous avez un type de document, mais soit optèrent sur le mode standard IE8, ou sont en cours d'exécution sur localhost, ou "mode de compatibilité"
  • IE 8 mode standard - vous avez un type de document, et sont sur le INTRANET (mode par défaut)

maintenant, si vous êtes rendu en mode IE5/IE7, alors rien ne change sauf qu'il n'y sera quelques méthodes ajoutées que ne devrait pas interférer avec votre page. Cependant, si la majorité d'entre vous fonctionne avec un jeu de doctype, les modifications suivantes ont été apportées en mode IE8 Standards.

1.) document.getElementById(id); //now only returns the CORRECT matches! 

2.) .getElementsByName (nom); // maintenant ne renvoie que les correspondances CORRECT! non, pas fixé!

3.) .getAttribute(name); //returns the CORRECT value for the given attribute! 
4.) .setAttribute(name, value); //actually SETS the name/value CORRECTLY (no more cAmElCaSe crud)! 
5.) CSS Expressions are NO LONGER allowed (deprecated) 
6.) Operation Aborted errors will still be thrown (in some cases) however the cases are fewer, and the error won't kill the entire page/DOM 
7.) The attributes[] array on elements should (from the RC build onwards) be correct in terms of contents, have a length, etc. 
8.) Button elements now submit the contents of the value attribute, NOT the HTML contents of the Button Tag 

Il a également été un tas de CSS 2.1 fixe, donc les choses qui ont rendu bizarre avant ou hacks nécessaires, devraient être beaucoup mieux. (voir ci-dessous pour les détails sur alpha/transparence - il y a eu de grands changements)

Voir le IE Blog pour plus de détails.

également voir Web Bug Track pour plus de détails à grains fins sur les bogues, les correctifs pour IE8 (et tous les autres navigateurs)

SVG, coins arrondis, ECMAScript à base d'écoute d'événement, conception meilleure forme d'élément/événements, etc. sont toujours portés disparus. PS Si vous avez des problèmes spécifiques, faites le nous savoir et nous les aiderons à les rechercher. ;-)

Mises à jour:

fenêtre .les événements resize sont actuellement démolis dans IE8 beta2 et IE8 Partner Release 1 (ne sera pas le feu) maintenant fixé dans RTM construire

window.open(); in IE8 Partner Release is sometimes failing "claiming" that the target url is not available (quirky, hard to reproduce) 
10

Voici un vraiment amusant (/ sarcasme off) que j'ai découvert. Si vous avez un type MIME de "application/javascript", plutôt que "texte/javascript" Internet Explorer:

A) ignorer le type MIME inattendu et utiliser le fichier quand même?

B) ne pas charger le fichier du tout? C) prendre la première centaine de lignes du fichier, les ajouter à un autre fichier JS qui le précède dans le HTML, puis vous donner toutes sortes d'erreurs parce que votre demi-fichier désordonné + réel le fichier ne fonctionne pas?

C'est vrai, la réponse est C ... Je ne plaisante pas. Nous avions l'habitude d'utiliser le type MIME "application/javascript" pour empêcher la mise en cache de fichiers JS dans IE6/7, et par conséquent j'ai perdu une journée entière à essayer de comprendre pourquoi IE8 donnait des erreurs vraiment folles. Heureusement, j'ai finalement compris ce qui se passait quand il m'a dit que j'avais une erreur sur la ligne 650 d'un fichier de 500 lignes (et puis quand j'ai vu le fichier dans le débogueur, j'ai vu l'autre fichier ajouté au préalable).

Morale de l'histoire: si vous voulez qu'IE8 fonctionne, N'utilisez PAS "application/javascript" pour le type MIME de vos fichiers JS.

+0

Il s'est avéré que le simple changement du type MIME de l'en-tête de réponse HTTP n'était pas suffisant; Finalement, j'ai dû abandonner complètement notre servlet Javascript, car les fichiers JS servis statiquement par Apache fonctionnaient très bien dans IE8 (et je ne voulais pas perdre plus de temps à réparer les en-têtes de la servlet). – machineghost

+1

Et je pensais que je devenais fou !!! N'est-ce pas supposé être "standard" ??? application/javascript ne fait que casser mon inter-site JSONP avec IE 8 ... Merci! – jldupont

+1

Cela semble être vrai, même pour IE9. –

1

Un peu en retard à cette fête, mais en recherchant la même question je suis tombé sur cet article MSDN qui met en évidence des fonctions non supportées par le moteur JScript d'IE 8.

Questions connexes