2009-09-23 6 views
18

J'ouvre une iframe en JavaScript:Attendez iframe pour charger JavaScript

righttop.location = "timesheet_notes.php"; 

et que vous souhaitez transmettre des informations à ce:

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

Il est évident que, cette ligne ne va pas travailler jusqu'à ce que la page soit complètement chargée dans l'iframe, et cet élément de formulaire est là pour être écrit.

Alors, quel est le meilleur moyen de résoudre ce problème? Une sorte de boucle de timeout? Idéalement, je voudrais vraiment garder tout contenu dans ce script particulier, plutôt que d'avoir à ajouter des trucs supplémentaires à la page qui est ouverte.

Répondre

40

Tout d'abord, je crois que vous êtes censé affecter la propriété src des iframes, non location. Deuxièmement, crochet événement load du iframe pour effectuer vos modifications:

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

Encore une fois, cela est tout ce que vous voulez dire présumant i cadre, pas framesets.

+0

Merci Crescentfresh - c'est tout à fait ce que je cherchais; simple, élégant, et fonctionne un régal! :-) –

+0

Y at-il un moyen de le faire en attachant un événement? Disons que l'iframe peut avoir ses propres gestionnaires onload et je ne veux pas les accidentellement les écraser en réaffectant la propriété onload. –

+1

@Eric: oui. Utilisez une bibliothèque comme Mootools, Prototype 1.6 ou jQuery. Si vous n'en avez pas, utilisez ceci: http://ejohn.org/blog/flexible-javascript-events/ –

4

Je suppose que vous pouvez faire assez facilement ce avec jQuery ... jQuery Home crochet Juste la page à la jQuery $ function() ... par exemple

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

Jetez un coup d'œil sur le fichier exemple Uploader ici: Using iframes for multiple file uploads...

+0

Je n'avais pas vraiment envie d'entrer dans jquery (je n'ai pas encore ouvert cette porte), j'espérais juste faire avec quelques lignes élégantes de javascript. Mais merci quand même Rajesh! –

+0

pas un problème .. merci de poster comme je dois apprendre quelques astuces sans utiliser jquery :) –

0

essayez celui-ci ...

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

L'original Poster n'a jamais mentionné jQuery et n'a pas le tag jQuery dans le post. Je suggère alors qu'ils ne cherchent pas une réponse jQuery. –

+1

L'utilisation de ready sur les iframes ne fonctionnera pas comme prévu, http://tinyurl.com/glybl34 – dude