2009-09-23 23 views
18

Estoy abriendo un iframe en JavaScript:Esperar iframe para cargar en JavaScript

righttop.location = "timesheet_notes.php"; 

y luego quieren pasar información a la misma:

righttop.document.notesform.ID_client.value = Client; 

Obviamente, sin embargo, esa línea no se va para trabajar hasta que la página se haya cargado completamente en el iframe, y ese elemento de formulario está allí para ser escrito.

Entonces, ¿cuál es la mejor/más eficiente manera de abordar esto? ¿Algún tipo de ciclo de tiempo de espera? Idealmente, me gustaría mantener todo dentro de este script en particular, en lugar de tener que agregar elementos adicionales a la página que se está abriendo.

Respuesta

40

En primer lugar, creo que se supone que afecta a la propiedad src de iframes, no a location. En segundo lugar, el gancho de eventos del marco flotante load para realizar los cambios:

var myIframe = document.getElementById('righttop'); 
myIframe.addEventListener("load", function() { 
    this.contentWindow.document.notesform.ID_client.value = Client; 
}); 
myIframe.src = 'timesheet_notes.php'; 

Una vez más, todo esto es suponiendo que decir i marco, no de marcos.

+0

Gracias Crescentfresh - que es absolutamente lo que estaba buscando; simple, elegante y funciona como un regalo! :-) –

+0

¿Hay alguna forma de hacerlo adjuntando un evento? Digamos que el iframe puede tener sus propios controladores de carga y no quiero golpearlos accidentalmente al reasignar la propiedad de carga. –

+1

@Eric: sí. Use una biblioteca como Mootools, Prototype 1.6 o jQuery. Si no tiene uno de esos, use esto: http://ejohn.org/blog/flexible-javascript-events/ –

4

Supongo que puede hacer esto con jQuery ... jQuery Home Simplemente conecte la página a jQuery $ function() ... p. Ej.

$(document).ready(function() { 
$('iframe').load(function() { 
    // write your code here.... 
} 

echar un vistazo rápido en el ejemplo de archivo de subida aquí: Using iframes for multiple file uploads...

+0

Realmente no quería entrar en jquery (aún no he abierto esa puerta), esperaba tratar con eso en unas elegantes líneas de javascript. Pero gracias de todos modos Rajesh! –

+0

no es un problema ... gracias por publicar, ya que tengo que aprender algunos trucos sin usar jquery :) –

0

prueba este ...

$('iframe').each(function() { 
    $(this).ready(function() { 
     $('#result').html("ready"); 
    }); 
}); 
+6

El Póster original nunca mencionó jQuery y no tiene la etiqueta jQuery en la publicación. Sugeriría que no están buscando una respuesta jQuery. –

+1

Usar ready on iframes no funcionará como se espera, http://tinyurl.com/glybl34 – dude

Cuestiones relacionadas