2009-09-18 5 views
4

Je suis en train de tester une application Web basée sur JavaScript relativement complexe dans Internet Explorer 8 sous Windows Vista. Après le chargement de l'application, IE est en mode navigateur "standards" et en mode document "IE 8 standards". Pendant que l'application est en cours d'exécution, IE rechargera parfois la page et affichera un message disant quelque chose comme "Un problème d'affichage avec (URL) a amené Internet Explorer à recharger la page en vue de compatibilité" (pas le message exact, je suis sur version non anglaise de Vista). Après le rechargement, le navigateur est en mode Quirks.Comment JavaScript peut-il obliger IE 8 à recharger une page en mode compatibilité?

Déboguer le code Javascript a été un exercice futile puisque le problème ne peut pas être reproduit ou réduit de manière fiable, donc j'apprécierais tout aperçu de ce qui pourrait causer ce comportement.

+0

cela semble mauvais. Il existe des outils de débogage JavaScript pour IE - avez-vous ceux installés? Montrent-ils des erreurs/problèmes? – oberhamsi

Répondre

2

Il doit y avoir un problème avec le balisage que vous desservez/créez via innerHTML. Voici un article de l'équipe IE qui comprend details of IE's auto-recovery de balisage qui est impossible à analyser correctement dans IE8 standards mode:

... il y a des chemins de code particulier dans le nouveau moteur de mise en page où, si une erreur se produire , le processus de mise en page ne peut pas récupérer gracieusement et nous avons gardé des assertions autour de ces chemins ... Nous avons peaufiné cette expérience dans la version d'IE8 en récupérant la mise en page "hard asserts" en utilisant la vue de compatibilité. En d'autres termes, nous pensons que montrer une page comme IE7 aurait une meilleure expérience utilisateur que de ne montrer aucun contenu.

Notez que l'utilisation innerHTML invoque l'analyseur HTML, il pourrait déclencher ce problème, même après que la page est chargée si alimenté une chaîne HTML, il ne peut pas faire ni queue ni tête.

+0

Excellent, c'est exactement l'information que je cherchais. Mon application crée beaucoup de HTML dynamiquement, maintenant je sais où commencer le débogage. Merci! –

1

check here ..

essentiellement. par page, vous pouvez ajouter une balise meta

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 

ou, l'ensemble du site ajoutez ceci à en-tête:

X-UA-Compatible: IE=EmulateIE7 
1

Sonne comme Automatic Crash Recovery se produisant dans le moteur de rendu lui-même. C'est un bogue dans IE lui-même plutôt que dans vos scripts, donc le débogage va être dur.

Est-ce que cela se produit sur toutes les installations IE8? IE8 est-il mis à jour avec les derniers correctifs? (Pourrait-il s'agir d'une extension tierce non fiable?)

Questions connexes