Je ne comprends pas du tout. Voici un peu de code Javascript qui fonctionne dans tous les navigateurs, mais IE 9. Il est appelé à partir d'une animation Flash en utilisant ExternalInterface
, et est destiné à redimensionner dynamiquement le film dans les DOM, si la taille de la séquence des changements à l'interne
function vResizeFlash(swfId, ht) {
document.getElementById(swfId).height = "100%";
document.getElementById('flashContainer').style.height = ht + "px";
}
Mais il fonctionne très bien si je modifier le document.titre:
function vResizeFlash(swfId, ht) {
// IE 9 won't run the rest of this function unless
// we go through the charade of changing the document title.
if (navigator.appName.indexOf("Microsoft") != -1) {
var docTitle = document.title.replace(/^(.+?)\s*$/,"$1");
document.title = docTitle + " ";
}
// Well-coded browsers begin here
document.getElementById(swfId).height = "100%";
document.getElementById('flashContainer').style.height = ht + "px";
}
Ici j'ai simplement couper les blancs de l'espace sur le côté droit de l' document.title
, puis ajouter d'un seul caractère d'espace blanc. Soudain, les lignes suivantes sont exécutées. Remarque: il existe d'autres ExternalInterface
des appels sur la page, et tous fonctionnent très bien, même dans IE 9, il n'est donc pas un Flash/IE 9 problème.
Je suis tombé sur le correctif parce que je a été de modifier le titre pour afficher les arguments de la fonction (comme une mise au point rapide de test), juste pour s'assurer que la fonction était de faire la course. Et soudain, le code a fonctionné. Le sortir? Ne fonctionne pas. 100% reproductible.
Quelqu'un sait pourquoi cette absolument stupéfiante comportement prend place?
Mise à JOUR
@c69 a posé la question: "Peut-être que son IE9 est morte code remover?"
Je ne savais pas à ce sujet, j'ai donc Googlé et trouvé cet article sur le sujet, ainsi que certains de discussion d'ailleurs. Je ne connais pas assez pour évaluer la façon dont cela affecterait une à deux lignes de la fonction Javascript, cependant, surtout depuis l'une des lignes qui n'ont un référent sur la page (bien qu'il est en fin de chargement par le SwfObject code). Néanmoins, il serait un mauvais bug pour un code "optimiseur" pour supprimer des lignes de code qu'il jugeait inutile, car il ne comprend pas comment on les appelle. Et si elle n'a pas à comprendre comment les lignes sont appelés, comment l'insertion d'une ligne faisant un faux modification au document.titre rendre cette code soudainement "nécessaire"?
Mise à JOUR 2
Une autre pièce du puzzle que Cela peut avoir quelque chose à faire avec IE 9 est le mode de compatibilité. La page commence dans IE 9 les normes de la mode.
Maintenant, si je tourne sur IE mode de compatibilité,
le problème disparaît sans l'aide de la hack. L'éteindre, et le problème revient (si pas de hack présent).
Mais quand j'ai essayé de faire un test simple en utilisant exactement les mêmes HTML (moins d'un couple de balises JSP) et une dépouillé SWF qui contient uniquement le code de redimensionnement et les outils de test, tout fonctionne bien. Dans cette affaire, cependant, pas de compatibilité de l'icône est affichée.
Nous sommes à l'aide de Tomcat 6.0.32. Je ne suis pas au courant que nous sommes spécial aux en-têtes, et il n'y a pas de balises meta concernant IE mode de compatibilité (dans l'application principale ou dans mon appli de test).