27

Precondición:IE9 arroja excepciones al cargar scripts en iframe. ¿Por qué?

Tengo una página aspx con iframe adentro. Este iframe apunta a la URL manejada por MVC en el mismo sitio (es un sitio híbrido, tanto ASP.NET estándar como ASP.NET MVC). La página resultante presentada por MVC contiene muchas referencias de scripts.

Problema:

IE9 se produce una excepción en cada guión único que se carga en marco flotante. Estas excepciones son similares a ésta:

Error: 'Function' is undefined 

Eso es, se dice que las cosas más básicas cada ventana tiene es de alguna manera ausente. Una vez que haya hecho clic en todas estas ventanas emergentes, ¡la página simplemente funciona como se diseñó!
Si cargo un URL del atributo <iframe /> src en el navegador directamente, todo funciona como se espera.
Si abro la página en otro navegador (probé Opera, Firefox), todo funciona como se espera, sin errores.

Entonces, ¿qué quiere IE9?

+0

Sea lo que sea que IE9 quiere, le faltará, a juzgar por el hecho de que * queremos * codificar * y señalar los mensajes de error *. – Jon

+1

"función" no tiene una F mayúscula en JavaScript. ¿Este es el problema? –

+2

No. [Objeto de función global] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function) –

Respuesta

27

No es this msdn page sobre este error (o característica).

Obtiene este tipo de errores cuando mueve el elemento iframe en DOM. En tales casos, IE 9 basura recoge el iframe (que causa el error no definido) y lo vuelve a cargar en otra posición.

En general, se debe crear el elemento, establezca su atributo src única vez y luego ponerlo en algún lugar en el árbol DOM vez. No tiene nada que ver con el código que se ejecuta en el propio iframe.

+0

+1 - Tuve este problema exacto no hace cinco horas, y lo único que cambié entre "trabajo" y "no funciona" es un código que movió iframes en el DOM. La eliminación de ese bit de código solucionó el problema (y yo usé z-index para producir el mismo efecto). –

+0

respuesta similar encontrada en esta publicación: http://stackoverflow.com/questions/5514973/javascript-code-in-iframes-in-ie9-not-working – ERR0

+0

He estado de vacaciones, así que no pude responder antes, pero esto parece relacionado. Sin embargo, en Áreas afectadas dice que esto ha cambiado de IE8 a IE9, pero también he visto el comportamiento de API faltante en IE8 ... ¡Todavía estoy de acuerdo con los puntos de bonificación! :) –

2

He encontrado esta misma situación en la naturaleza. síntomas básicos:

  • Usted código de script de carga en un iframe
  • El código script se ejecuta temprana (desde la sección de cabeza o parte superior del cuerpo)
  • IE se queja de algún objeto nativo falta

Descubrí que, a menudo, se puede evitar retrasando la ejecución del código del script hasta onload o DOMContentLoaded ... No tengo mucha ayuda, pero este es uno de los errores de scripts de IE más difíciles que he encontrado. Aumenté el puntaje de su pregunta, espero que otros la encuentren también y podamos obtener una respuesta más detallada.

Véase también esta pregunta: Error in Internet Explorer 9 (not earlier versions or other browsers) when including jQuery in an iframe

2

Colocar el bloque siguiente secuencia de comandos en la parte superior del marco flotante HTML <cabeza> parece resolver el problema en mi caso. Básicamente, obliga al iframe a volver a cargar, lo que, como algunos han señalado, resuelve el problema.Parece relativamente seguro, porque, sin cosas como 'Objeto' y 'Fecha', javascript es esencialmente inútil.

<script type="text/javascript"> 
    if(typeof(Object)==="undefined"){ 
     window.location.reload(); 
    } 
</script> 
1

Investigaciones posteriores revelaron que la solución es añadir el iframe ofender a su ubicación dom ANTES de configurar el atributo 'src'.

Una vez que se ha establecido 'src', cambiar la ubicación del iframe dentro de la pila DOM obliga a IE9 a recogerla.

Una vez que se ha configurado 'src', iframe se puede cambiar de tamaño y cambiar mediante el posicionamiento css, pero no puede cambiar la ubicación relativa en la pila DOM.

Muchas veces, los complementos como los cuadros de diálogo y las cajas de luz rellenarán un iframe con src ya configurado en el dom, luego se agregará/antependerá o lo que sea, lo que activará el GC.

0
function waitForjQuery(){ 
    if(typeof jQuery!='undefined'){ 
     //Do yor stuff! 
    } 
    else{ 
     setTimeout(function(){ 
      waitForjQuery(); 
     },500); 
    } 
} 
waitForjQuery(); 
+1

El código no comentado no es realmente útil. –

+1

¿Cómo responde esto siquiera la pregunta? Ni siquiera parece aplicarse a la pregunta – JoseM

Cuestiones relacionadas