Código JavaScript en iframes en IE9 no funciona
asp.net internet-explorer (3)
Tengo un sitio muy completo en ASP.NET que usa iframes. Estoy trabajando para cambiar un control antiguo que habíamos estado usando para mostrar diálogos para usar los cuadros de diálogo de la interfaz de usuario jQuery. También me estoy asegurando de que todo funcione bien en IE9.
El hecho es que el script que tengo en las páginas que se muestran en iframes no funciona en IE9. ¿Por qué? Porque Object, Array y String no están definidos. Puede haber algunos otros problemas, solo he visto estos.
No hay ninguna posibilidad (por muchas razones) de dejar de usar iframes en algunos cuadros de diálogo. Y prefiero no usar la metaetiqueta para forzar IE8 Compability. ¿Alguien sabe alguna forma de solucionar este error feo en IE9?
Gracias, Diego
Editar
Aquí hay información que puede ser útil:
Código de jQuery para el iframe en un complemento que he hecho para configurar el diálogo de la 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);
Existe una forma similar de lograr esto utilizando 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 deben solucionar este problema.
Nota: here hay algo de 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 de JavaScript en los iframes. Ni siquiera con javascript en iframes agregados por javascript o cualquier biblioteca (tengo muchas librerías js y plugins que podrían estar atornillando IE9).
El problema es cuando mueves el iframe o un ancestro a través del DOM. IE9 excederá el código en la página cargada en el iframe tantas veces como movimientos realice. Cada vez (pero el último) tendrá Objecty, String, Array 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á solo una 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
Tengo un problema similar, sin embargo, el iframe se agrega a la página en lugar de eliminarse. Todavía parece tener los mismos problemas.