2009-09-23 16 views
18

sto aprendo un iframe in JavaScript:Attendere iframe per caricare in JavaScript

righttop.location = "timesheet_notes.php"; 

e poi vogliono passare informazioni ad esso:

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

Ovviamente, però, che la linea non sta andando lavorare fino a quando la pagina non è completamente caricata nell'iframe e l'elemento del modulo è lì per essere scritto.

Quindi, qual è il modo migliore/più efficace per risolvere questo problema? Una specie di loop timeout? Idealmente mi piacerebbe davvero mantenere tutto contenuto in questo particolare script, piuttosto che dover aggiungere elementi aggiuntivi alla pagina che si sta aprendo.

risposta

40

Prima di tutto, credo che si suppone che si influenzi la proprietà src di iframe, non location. In secondo luogo, gancio eventi del iframe load per eseguire le modifiche:

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

Ancora una volta, questo è tutto presumendo che vuoi dire i telaio, non frame.

+0

Grazie Crescentfresh - che è assolutamente quello che cercavo; semplice, elegante e funziona a meraviglia! :-) –

+0

C'è un modo per farlo allegando un evento? Diciamo che l'iframe può avere i propri gestori di onload e non voglio rovinarli accidentalmente riassegnando la proprietà onload. –

+1

@Eric: sì. Utilizzare una libreria come Mootools, Prototype 1.6 o jQuery. Se non ne hai uno, usa questo: http://ejohn.org/blog/flexible-javascript-events/ –

4

Immagino di poterlo fare facilmente con jQuery ... jQuery Home Basta agganciare la pagina al jQuery $ function() ... ad es.

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

hanno un rapido sguardo al file di esempio uploader qui: Using iframes for multiple file uploads...

+0

Non volevo entrare nel jquery (non ho ancora aperto quella porta), speravo solo di affrontarlo in alcune eleganti linee di javascript. Ma grazie comunque Rajesh! –

+0

non un problema .. grazie per aver postato come ho imparato alcuni trucchi senza usare jquery :) –

0

provare questo ...

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

Il poster originale non ha mai menzionato jQuery e non ha il tag jQuery nel post. Suggerirei che non stanno cercando una risposta jQuery. –

+1

L'utilizzo degli iframe pronti non funzionerà come previsto, http://tinyurl.com/glybl34 – dude