2009-08-05 4 views
2

ich zwei Frames in einem Frameset habe - frame[0] enthält ein Skript, das eine Seite in frame[1]Wie Sie Javascript in einem Rahmen erhalten, zu warten, bis eine Seite in einem zweiten Frame geladen ist

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

mit lädt und führt dann Aktionen auf dieser Seite, z. B. das Suchen von Text innerhalb der Seite. Ich muss das Skript warten, bis page.html in den zweiten Rahmen geladen wurde, bevor dies getan wird, und ich kann onload=... nicht in der zweiten Seite verwenden, da ich keine Kontrolle über seine Quelle habe.

Gibt es eine Möglichkeit, dies zu tun?

Antwort

2

Verwendung onload Ereignis von FRAME Element

edit:

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

oder wenn Sie laden verschiedene Seiten auf dem gleichen Rahmen verwenden diese:

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

oder

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

Können Sie erweitern, dass? Wenn ich verwenden top.frames [1] .location.href = 'http://ongar.org/mypage.html'; top.frames [1] .onload (alert ('loaded')); Ich bekomme die Warnung bevor mypage.html geladen wurde, da es bereits eine Seite in Frame [1] gibt. Ich möchte die Warnung erhalten, nachdem meine Seite voll geladen wurde. –

+0

Wahr, aber im obigen Beispiel haben Sie die Klausel, die den Wert location.pathname der neuen Seite überprüft, nicht gefunden. –

+0

Onload-Ereignisse in Iframes sind eine Art von nutzlos - sie sind sehr inkonsistent in den Browsern, auch innerhalb eines Browsers verstehen, warum Onload feuert kann chaotisch sein. Verwenden Sie mit Vorsicht! – mixonic

0

Wenn Sie haben Es gibt keine Kontrolle über die Quelle der geladenen Seite und, noch wichtiger, wenn es von einer anderen Domäne kommt, gibt es nur eine Antwort:

Sie können nicht.

Interframe-Kommunikation zwischen verschiedenen Domänen ist nicht möglich. Und Sie benötigen Interframe-Kommunikation, weil Sie auf der geladenen Seite etwas wie jquery's ready-Funktion benötigen, um festzustellen, ob die gesamte Seite (das DOM) geladen ist.

0

Nun, ich mache das, und es funktioniert.

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; 
    } 
}
Verwandte Themen