Wie man Javascript in einem Rahmen erhalten, zu warten, bis eine Seite in einem zweiten Frame geladen ist
-
22-07-2019 - |
Frage
Ich habe zwei Frames in einem Frameset - frame[0]
enthält ein Skript, das eine Seite in frame[1]
mit
top.frames[1].location.href = 'http://some_location.com/page.html';
und führt dann Aktionen auf dieser Seite, zum Beispiel Text innerhalb der Seite zu suchen. Ich brauche das Skript zu warten, bis page.html
, bevor Sie diese im zweiten Frame geladen ist, und ich kann nicht onload=...
in der zweiten Seite benutzen, weil ich keine Kontrolle über ihre Quelle haben.
Gibt es eine Möglichkeit, dies zu tun?
Lösung
Verwendung onload Ereignis von FRAME-Elemente
edit:
<frame onload = "if( top.frames[1].location.pathname == '/page.html' " ) alert( 'loaded' )";
oder, wenn Sie verschiedene Seiten auf die gleiche Rahmen Verwendung laden 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' )";
Andere Tipps
Nun, ich weiß 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;
}
}
Wenn Sie haben keine Kontrolle über die Quelle der geladenen Seite und was noch wichtiger ist, wenn es aus einer anderen Domäne kommt, dann gibt es nur eine Antwort:
Sie können es nicht.
Interkommunikation zwischen verschiedenen Domänen ist nicht möglich. Und Sie brauchen Inter-Kommunikation, weil Sie so etwas wie jQuery-Ready-Funktion in der geladenen Seite benötigen würden, um zu bestimmen, ob die gesamte Seite (DOM) geladen ist.