Come ottenere javascript in un frame per attendere fino a quando una pagina non viene caricata in un secondo frame
-
22-07-2019 - |
Domanda
Ho due frame in un set di frame - frame [0]
contiene uno script che carica una pagina in frame [1]
usando
top.frames[1].location.href = 'http://some_location.com/page.html';
e quindi esegue azioni su quella pagina, ad esempio la ricerca di testo all'interno della pagina. Ho bisogno che lo script attenda fino a quando page.html
non è stato caricato nel secondo frame prima di farlo, e non posso usare onload = ...
nella seconda pagina perché Non ho alcun controllo sulla sua fonte.
C'è un modo per farlo?
Soluzione
usa l'evento onload dell'elemento FRAME
modifica:
<frame onload = "if( top.frames[1].location.pathname == '/page.html' " ) alert( 'loaded' )";
o se carichi pagine diverse nello stesso frame usa questo:
<frame onload = "if( top.frames[1].location.pathname != 'about:blank' " ) alert( 'loaded' )";
o
<frame src = '/dummyInitial.html' onload = "if( top.frames[1].location.pathname != '/dummyInitial.html' " ) alert( 'loaded' )";
Altri suggerimenti
Beh, lo faccio e funziona.
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;
}
}
Se non hai alcun controllo sulla fonte della pagina caricata e, cosa più importante, se proviene da un altro dominio, allora c'è una sola risposta:
Non puoi.
La comunicazione interframe tra domini diversi NON è possibile. E hai bisogno della comunicazione interframe perché avresti bisogno di qualcosa come la funzione ready di jquery nella pagina caricata per determinare se l'intera pagina (il DOM) è caricata.