44 votos

Tremendamente extraño IE 9 Javascript error: la Alteración de doc título que permite el posterior ejecución del código

Yo no entendía en absoluto. Aquí está algo de código Javascript que funciona en todos los navegadores, pero IE 9. Se llama de una película Flash, utilizando ExternalInterface, y está destinado a cambiar el tamaño de la película en el DOM si el tamaño de la película cambios internos

function vResizeFlash(swfId, ht) {
    document.getElementById(swfId).height = "100%";
    document.getElementById('flashContainer').style.height = ht + "px";
}

Pero funciona bien si me alterar el documento.título:

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";
}

Aquí yo simplemente recortar cualquier espacio en blanco de la parte derecha de la document.title, a continuación, agregue un único carácter de espacio en blanco. De repente las siguientes líneas se ejecutan. Nota: hay otros ExternalInterface de llamadas en la página, y todos ellos funcionan bien, incluso en IE 9, así que no es un Flash/IE 9 problema.

Me encontré en la revisión debido a que yo estaba alterando el título a mostrar los argumentos de la función (como una rápida depuración de la prueba), sólo para asegurarse de que la función era llevar. Y de repente el código funcionó. Llevarlo a cabo? No funciona. 100% reproducible.

Alguien sabe por qué esto es absolutamente sorprendente comportamiento se lleva a cabo?

ACTUALIZACIÓN

@c69 ha planteado la pregunta: "tal vez su IE9 del código muerto remover?"

Yo no sabía acerca de esto, así que fui y lo busqué en Google y encontré este artículo sobre el tema, así como algunos de discusión de ella en otros lugares. No sé lo suficiente de ella para evaluar cómo esto afectaría a una de dos líneas en función de Javascript, sin embargo, especialmente desde que una de las líneas tiene un referente en la página (aunque ya es tarde-carga a través de la SwfObject código). Sin embargo, sería un muy mal el fallo de un código de "optimizador" para eliminar las líneas de código que se consideran innecesarios ya que no entiende cómo se llama. Y si lo hizo no logran entender cómo las líneas son las llamadas, cómo se hace la inserción de una línea de fabricación de un falso cambio en el documento.título de procesamiento que el código de repente "necesario"?

ACTUALIZACIÓN 2

Otra pieza del rompecabezas que Esto puede tener algo que ver con el IE 9 es el modo de compatibilidad. La página comienza en IE 9 del modo estándar.

enter image description here

Ahora, si me enciende es decir el modo de compatibilidad,

enter image description here

el problema desaparece sin usando el hack. Lo apague, y el problema vuelve a aparecer (si no hay hack presente).

Pero cuando traté de hacer una prueba sencilla usando el mismo HTML (menos un par de etiquetas JSP) y una despojado SWF que sólo contiene el código de tamaño y las herramientas para probar que todo funciona bien. En ese caso, sin embargo, la compatibilidad no se muestra el icono.

enter image description here

Estamos usando Tomcat 6.0.32. Yo no soy consciente de que estamos utilizando cualquier cabeceras especiales, y no hay ninguna meta tags en cuanto es decir el modo de compatibilidad (en la aplicación principal o en mi aplicación de prueba).

2voto

Charlie Puntos 36

como InvertedSpear menciona, comprobar su tipo de documento, yo lo he tenido problemas con IE9 recientemente y la mayoría de ésta se reducía a la Doc tipo etiquetas de activación de un modo de compatibilidad no tenía la necesidad, el mismo puede ser cierto para las etiquetas meta, por lo que podría producirse a partir de las etiquetas Meta.

Siempre se puede imponer un trabajo de modo de compatibilidad con los enlaces de abajo.

de: http://evolpin.wordpress.com/2011/02/25/ie9-compatibility-and-the-meta-tag/

He descubierto que esto es de hecho documentado por Microsoft...

http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx

"X-UA-Compatible encabezado no es sensible a mayúsculas y minúsculas; sin embargo, debe aparecer en la cabecera de la página web (en la sección de la HEAD) antes de todos los demás elementos, excepto para el título del elemento y otros elementos meta."

2voto

Scott Puntos 21

Cada vez que veo algo como esto sucede en cualquier idioma, es porque hay otro código que tiene un error. Como lo señaló su caso sencillo en el que no se produce el problema. Pruebe a quitar el resto del código de un par de líneas en un tiempo hasta que el problema desaparezca el último eliminado de código debe contener el problema.

Saludos

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X