IE9 lanza excepciones al cargar scripts en iframe. ¿Por qué?


Condición previa:

Tengo una aspx-page con iframe dentro. Este iframe apunta a la url manejada por MVC en el mismo sitio (es un sitio híbrido, ambos estándar ASP.NET y ASP.NET MVC). La página resultante renderizada por MVC contiene muchas referencias de scripts.

Problema:

IE9 lanza una excepción en cada script que carga en iframe. Estas excepciones son similares a esta:

Error: 'Function' is undefined

Es decir, dice que las cosas más básicas que tiene cada ventana es de alguna manera ausente. Una vez que haya hecho clic a través de todas estas ventanas emergentes, la página solo funciona como está diseñado!
Si carga una URL desde el atributo <iframe /> src en el navegador directamente, todo funciona como se espera.
Si abro la página en otro navegador (he probado Opera, Firefox), todo funciona como se esperaba no sin errores.

Entonces, ¿qué quiere IE9?

Author: Rolice, 2011-12-05

6 answers

Existe esta página de msdn sobre este error (o característica).

Obtienes este tipo de errores cuando mueves el elemento iframe en DOM. En tales casos, IE 9 garbage recoge el iframe (causando su error indefinido) y lo vuelve a cargar en otra posición.

En general, debe crear el elemento, establecer su atributo src solo una vez y luego ponerlo en algún lugar del árbol DOM una vez. No tiene nada que ver con el código que se ejecuta en el iframe sí mismo.

 27
Author: copy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-31 04:00:11

Me he encontrado con esta misma situación en la naturaleza. Síntomas básicos:

  • Carga el código de script en un iframe
  • El código del script se ejecuta temprano (desde la sección principal o la parte superior del cuerpo)
  • IE se queja de que falta algún objeto nativo

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

Ver También esta pregunta: Error en Internet Explorer 9 (no versiones anteriores u otros navegadores) al incluir jQuery en un iframe

 2
Author: Stijn de Witt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:30:20

Colocar el siguiente bloque de script en la parte superior del iframe html

parece resolver el problema en mi caso. Básicamente, obliga al iframe a recargar, 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>
 2
Author: Scott Paradis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-28 20:38:47

Intente cargar el javascript al final después de cargar la página web completa. Siento que el script se está ejecutando incluso antes de que el iframe esté completamente cargado.

Para alguna sugerencia de scripting en IE9 ver el enlace dado a continuación http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx

 1
Author: Jayprakash S T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-05 15:15:01

Una investigación posterior reveló que la solución es agregar el iframe ofensivo a su ubicación dom ANTES de establecer el atributo 'src'.

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

Una vez que 'src' ha sido establecido, iframe puede ser redimensionado y cambiado a través de posicionamiento css, pero no puede cambiar la ubicación relativa en la pila DOM.

Muchas veces, los complementos como los diálogos y las cajas de luz iframe con src ya establecido en el dom, luego anexar / anteponer o lo que sea, activando el GC para que tenga lugar.

 1
Author: Scott Paradis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-05 16:28:01
function waitForjQuery(){
    if(typeof jQuery!='undefined'){
        //Do yor stuff!
    }
    else{
        setTimeout(function(){
            waitForjQuery();
        },500);
    }
}
waitForjQuery();
 0
Author: Mr Mols,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-22 13:16:19