2009-08-05 4 views
2

J'ai deux cadres dans un jeu de cadres - frame[0] contient un script qui charge une page en frame[1] utilisantComment obtenir javascript dans un cadre d'attendre jusqu'à ce qu'une page est chargée dans un second cadre

top.frames[1].location.href = 'http://some_location.com/page.html'; 

et effectue ensuite actions sur cette page, par exemple la recherche de texte dans la page. J'ai besoin que le script attende jusqu'à ce que page.html soit chargé dans la deuxième image avant de faire ceci, et je ne peux pas utiliser onload=... dans la deuxième page parce que je n'ai aucun contrôle sur sa source.

Existe-t-il un moyen de le faire?

Répondre

2

utilisation événement onload de l'élément CADRE

modifier:

<frame onload = "if(top.frames[1].location.pathname == '/page.html' ") alert('loaded')"; 

ou si vous chargez des pages différentes à la même utilisation du cadre ceci:

<frame onload = "if(top.frames[1].location.pathname != 'about:blank' ") alert('loaded')"; 

ou

<frame src = '/dummyInitial.html' onload = "if(top.frames[1].location.pathname != '/dummyInitial.html' ") alert('loaded')"; 
+0

Pourriez-vous développer là-dessus? Si j'utilise top.frames [1] .location.href = 'http://ongar.org/mypage.html'; Top.frames [1] .onload (alert ('chargé')); Je reçois l'alerte avant que mypage.html ne soit chargé, car il y a déjà une page dans le cadre [1]. Je voudrais l'alerte après mypage.html a complètement chargé. –

+0

True, mais dans l'exemple ci-dessus vous avez manqué la clause de vérification de la valeur de la nouvelle page. –

+0

Les événements de chargement dans les iframes sont en quelque sorte inutiles - ils sont très incohérents d'un navigateur à l'autre, même dans le cas d'un navigateur qui comprend pourquoi le chargement d'un chargement peut être désordonné. Utiliser avec précaution! – mixonic

0

Si vous avez e pas de contrôle sur la source de la page chargée et plus important encore, si elle provient d'un autre domaine, alors il n'y a qu'une seule réponse:

Vous ne pouvez pas.

La communication inter-trames entre différents domaines n'est PAS possible. Et vous avez besoin d'une communication intertrame car vous auriez besoin de quelque chose comme la fonction prête de jquery dans la page chargée pour déterminer si la page entière (le DOM) est chargée.

0

Eh bien, je fais cela, et cela fonctionne.

var idInterval; 
function callPage() 
{ top.main.document.location.href = somepage.aspx; 
    document.getElementById('divLoading').style.visibility ="visible"; 
    idInterval = setInterval("validaFrameMain()",50); 
} 
//look if the frame page is complete load 
function validaFrameMain() 
{ 
    if (top.main.document.readyState != "complete") 
    {document.getElementById('divLoading').style.visibility ="visible";} 
    else 
    { document.getElementById('divLoading').style.visibility ="hidden";; 
    clearInterval(idInterval); 
    idInterval = nothing; 
    } 
}
Questions connexes