Este fue el problema exacto me encontré con nuestro cliente. Creé un pequeño plugin jquery que parece funcionar para la preparación del iframe. Utiliza el sondeo para comprobar el documento iframe readyState combinado con el url interno del documento combinado con la fuente del iframe para asegurarse de que el iframe de hecho está "listo".
El problema con "onload" es que necesita acceder al iframe real que se está agregando al DOM; si no lo hace, debe intentar capturar el iframe cargando, que si está almacenado en la memoria caché, entonces no. Lo que necesitaba era un script que se pudiera llamar en cualquier momento, y determinar si el iframe estaba o no "listo".
aquí está la pregunta:
Holy grail for determining whether or not local iframe has loaded
y aquí está la jsFiddle que finalmente ocurrió.
https://jsfiddle.net/q0smjkh5/10/
En el jsFiddle arriba, yo estoy esperando onload para añadir un iframe para el Reino, a continuación, comprobar listo estado de documento interno del marco flotante - que debe ser dominios porque se apuntó a wikipedia - pero Chrome parece informe "completo". A continuación, se llama al método Iadyady del complemento cuando el iframe está listo. La devolución de llamada intenta verificar nuevamente el estado listo del documento interno, esta vez informando una solicitud de dominio cruzado (que es correcto), de todos modos parece funcionar para lo que necesito y espero que ayude a otros.
<script>
(function($, document, undefined) {
$.fn["iready"] = function(callback) {
var ifr = this.filter("iframe"),
arg = arguments,
src = this,
clc = null, // collection
lng = 50, // length of time to wait between intervals
ivl = -1, // interval id
chk = function(ifr) {
try {
var cnt = ifr.contents(),
doc = cnt[0],
src = ifr.attr("src"),
url = doc.URL;
switch (doc.readyState) {
case "complete":
if (!src || src === "about:blank") {
// we don't care about empty iframes
ifr.data("ready", "true");
} else if (!url || url === "about:blank") {
// empty document still needs loaded
ifr.data("ready", undefined);
} else {
// not an empty iframe and not an empty src
// should be loaded
ifr.data("ready", true);
}
break;
case "interactive":
ifr.data("ready", "true");
break;
case "loading":
default:
// still loading
break;
}
} catch (ignore) {
// as far as we're concerned the iframe is ready
// since we won't be able to access it cross domain
ifr.data("ready", "true");
}
return ifr.data("ready") === "true";
};
if (ifr.length) {
ifr.each(function() {
if (!$(this).data("ready")) {
// add to collection
clc = (clc) ? clc.add($(this)) : $(this);
}
});
if (clc) {
ivl = setInterval(function() {
var rd = true;
clc.each(function() {
if (!$(this).data("ready")) {
if (!chk($(this))) {
rd = false;
}
}
});
if (rd) {
clearInterval(ivl);
clc = null;
callback.apply(src, arg);
}
}, lng);
} else {
clc = null;
callback.apply(src, arg);
}
} else {
clc = null;
callback.apply(this, arguments);
}
return this;
};
}(jQuery, document));
</script>
y usted confirma que las obras Galleria cuando se carga directamente en lugar de a través de un iframe, correcto? –
Sí, galleria funciona perfectamente cuando lo usamos directamente en una página normal. – EtienneT
posible duplicado de [javascript devuelto cuando IFRAME ha terminado de cargar?] (Http: // stackoverflow.com/questions/164085/javascript-callback-when-iframe-is-finished-loading) –