Código Javascript en iframes en IE9 no funciona


Tengo un sitio muy completo en ASP.NET que utiliza iframes. Estoy trabajando para cambiar un control antiguo que habíamos estado usando para mostrar diálogos para usar diálogos de interfaz de usuario de jQuery. También me estoy asegurando de que todo funcione bien en IE9.

El hecho es: el script que tengo en las páginas mostradas en iframes no funciona en IE9. ¿Por qué? Porque Objeto, Matriz y Cadena son indefinidos. Puede haber algunos otros problemas, solo he visto estos.

No hay posibilidad (debido a muchas razones) de dejar de usar iframes en algunos diálogos. Y prefiero no usar la etiqueta meta para forzar la Compatibilidad de IE8. ¿Alguien sabe alguna manera de solucionar este error feo en IE9?

Gracias, Diego

Editar

Aquí hay algo de información que puede ser helfull:

Código de jQuery para el iframe en un plugin que he hecho para configurar el diálogo de interfaz de usuario de jQuery:

options.content = $("<iframe>")
    .attr("src", options.intSrcIframe)
    .attr("frameborder", 0)
    .attr("scrolling", options.intIframeScrolling)
    .css("background-color", options.intBgColorIframe)
    .attr("height", "100%")
    .attr("width", "100%");

_this.html(options.content);
Author: Diego, 2011-04-01

3 answers

Nota: aquí hay alguna documentación de IE9 que puede ayudar a entender. Gracias a @Ben Amada por compartirlo.


Después de casi una semana de volverme loco día tras día lo descubrí.

El problema con IE9 no es específicamente con el código javascript en los iframes. Ni siquiera con el javascript en iframes añadido por javascript o cualquier biblioteca (tengo un montón de bibliotecas js y plugins que podrían estar atornillando IE9).

El problema es cuando se mueve el iframe o un ancestro a través del DOM. IE9 ejecutará el código en la página cargada en el iframe tantas veces como movimientos realice. Cada vez (pero la última) tendrá Objeto, Cadena, Matriz y otros indefinidos (y otros errores también).

Ejemplo:

var iframe = $("<iframe>").attr("src", "www.example.com").attr("id", "myIframe");
iframe.appendTo("body");
$("#myIframe").appendTo("form:eq(0)");

El código javascript en "www.example.com" se ejecutará una vez con el error descrito anteriormente y luego una vez sin errores.

Con el siguiente código, el código se ejecutará una sola vez y correctamente:

var iframe = $("<iframe>").attr("src", "www.example.com").attr("id", "myIframe");
iframe.appendTo("form:eq(0)");

Espero que esto ayude a alguien a evitar este dolor en el culo,

Diego

 26
Author: Diego,
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-12 11:29:12

Existe una forma similar de lograr esto usando un iframe existente si no está creando un nuevo elemento.

$(function () {
    var iframeSrc = $("#iframeid").attr("src"); // capture target URI
    $("#iframeid").attr("src", "about:blank"); // delay loading until we reposition in the DOM
    $("#iframeid").appendTo("#newparent").attr("src", iframeSrc); // reposition, load iframe by setting src
});

IE9 o jquery framework necesita solucionar este problema.

 3
Author: SliverNinja - MSFT,
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-08-01 16:34:02

Tengo un problema similar, sin embargo, el iframe se agrega a la página en lugar de eliminarse de ella. Todavía parece tener los mismos problemas.

 0
Author: Ian Devlin,
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-10-12 14:13:04