2010-02-15 3 views
3

Un script tiers sur ma page Web crée un iframe. J'ai besoin de savoir quand cette iframe est prête, donc je peux manipuler son DOM.Vérifier si l'iframe est prêt à être écrit

Je peux penser à une approche hacky: essayer à plusieurs reprises de modifier le DOM de l'iFrame, et retourner le succès quand un changement, nous faisons des bâtons entre deux tentatives. Pour que cela fonctionne, je préférerais une propriété que je peux vérifier sur l'iframe à plusieurs reprises.

Existe-t-il une alternative, événement approche de savoir que l'iframe est prêt? Par exemple. Pouvons-nous redéfinir la fonction onLoad pour appeler notre code (mais je ne sais pas si je peux le faire, puisque je n'ai pas créé l'iframe).

Répondre

0

Pouvez-vous injecter du code de script arbitraire dans votre iframe? Si c'est le cas, vous devriez être capable de faire en sorte que du code s'exécute dans l'iframe sur le chargement de l'iframe qui appelle le code dans la page parente.

1

Avoir une variable dans la société mère:

var setToLoad = false; 

suivre d'une fonction pour le définir:

function SetToLoad() { 
    setToLoad = true; 
} 

Puis dans l'appel iFrame enfant cette fonction à l'aide du window.opener

function CallSetToLoad() { 
    window.opener.SetToLoad(); 
} 

window.onload = CallSetToLoad; 

Ceci ne s'exécutera pas tant que l'iframe n'aura pas fini de se charger, et s'il se trouve dans le même domaine, cela permettra accès à l'ouvreur Cela nécessiterait l'édition d'une petite partie du script tiers.

EDIT: Autre solution

Étant donné que vous ne pouvez pas modifier le script, vous pouvez essayer quelque chose comme:

frames["myiframe"].onload = function() 
{ 
    // do your stuff here 
} 
+0

Cela ne fonctionnera pas pour moi, parce que je ne peux pas apporter des modifications au script 3ème partie (ou les demander) –

+0

@Bilal Aslam: a ajouté modifié –

+0

problème avec l'événement de charge avec iframes, c'est qu'il ne se déclenche qu'une fois toutes les images et sous-images chargées. Une fonction prête à l'emploi comme jQuery serait plus utile. – Tom

2

en utilisant jquery?

function callIframe(url, callback) { 
    $(document.body).append('<IFRAME id="myId" ...>'); 
    $('iframe#myId').attr('src', url); 

    $('iframe#myId').load(function() 
    { 
     callback(this); 
    }); 
} 

Question réponse jQuery .ready in a dynamically inserted iframe

0

Bilal,

Il y a une propriété document.readyState que vous pouvez vérifier (œuvres dans IE).

foo(){ 
if([your iframe id].document.readyState != "complete") 
{ 
    setTimeout("foo()", 500); //wait 500 ms then call foo 
} 
else 
{ 
    //iframe doc is ready 
} 
} 

Arkady

Questions connexes