A lo largo de las líneas de Tim Down's answer pero aprovechando jQuery
(mencionado por el PO) y sin apretar el acoplamiento de la página que contiene y el iframe, puede hacer lo siguiente:
En el marco flotante:
<script>
$(function() {
var w = window;
if (w.frameElement != null
&& w.frameElement.nodeName === "IFRAME"
&& w.parent.jQuery) {
w.parent.jQuery(w.parent.document).trigger('iframeready');
}
});
</script>
En la página que contiene:
<script>
function myHandler() {
alert('iframe (almost) loaded');
}
$(document).on('iframeready', myHandler);
</script>
la IFRA me dispara un evento en el documento de la ventana primaria (potencialmente existente) - tenga en cuenta que el documento padre necesita una instancia de jQuery para que funcione. Luego, en la ventana principal, adjuntas un controlador para reaccionar ante ese evento.
Esta solución tiene la ventaja de no romper cuando la página que contiene no contiene el controlador de carga esperada. En términos más generales, no debería ser la preocupación del iframe conocer el entorno que lo rodea.
Tenga en cuenta, que estamos aprovechando el evento ready DOM para desencadenar el evento - que debería ser adecuado para la mayoría de los casos de uso.Si no lo es, simplemente conecte la línea de evento de disparo de evento de carga de la ventana, así:
$(window).on('load', function() { ... });
intente configurar el src del iframe antes de anexarlo al DOM. Esto debería evitar que el evento de carga se dispare dos veces. – Abe