2010-10-18 8 views
5

Mi chiedevo quale fosse il modo migliore per rilevare quando una pagina ha terminato il caricamento, dove la pagina in questione si trova in una scheda o finestra diversa, ... e dove la pagina da caricare potrebbe essere qualsiasi pagina sul web e non è sotto il mio controllo.Javascript per rilevare quando una pagina è caricata in un'altra finestra in Firefox

Sto usando solo Firefox e non mi importa se la soluzione richiede un'estensione per Firefox o script Grease Monkey (ho già aggiunto la configurazione/i comandi per consentire l'accesso a pagine di domini diversi).

Il codice sotto mostra un tentativo. A volte rileva quando la pagina iniziale è stata caricata ma quando premo "Invia" per ricaricare una nuova pagina nell'altra finestra, non la rileva.

Grazie.

<html> 
<head> 
<script type="text/javascript"> 

    currentPageObj = window.open("http://www.bbc.co.uk", "currentPage"); 

    currentPageObj.addEventListener("load", function(){alert("loaded")}, false); 

</script> 
</head> 
<body> 

    <form action="http://www.example.com" target="currentPage"> 
     <input type="submit"> 
    </form> 

</body> 
</html> 
+0

Le due pagine provengono dallo stesso dominio? – Robusto

+0

No potrebbe essere qualsiasi pagina web – spiderplant0

risposta

1

In altra pagina basta avere un gestore di eventi onLoad che chiama un metodo nella finestra padre (window.opener) per fare quello che vuoi. per esempio. nella pagina bambino:

window.addEventListener('load', function() { 
    if (window.opener && !window.opener.closed) { 
    window.opener.childLoaded(); 
    } 
}, false); 

E fare in modo che ChildLoad faccia ciò che si desidera nella finestra padre. (Nota: potrebbe essere meglio mantenere un riferimento alla finestra che vuoi trattare, ad esempio inizializza var parentWindow = window; perché quando chiami tra le finestre ciò può creare confusione.)

+0

Grazie andrewmu, ma ho dimenticato di menzionare che nell'altra finestra sto caricando una pagina da un dominio diverso di cui non ho il controllo e quindi non posso modificare questa pagina. – spiderplant0

+0

Ok .. questo è difficile allora. A meno che tu non faccia qualche intelligente proxy attraverso il tuo server e inserisci la risposta appropriata nella pagina al suo ritorno. Per esempio. metti il ​​precedente in un tag script che venga inserito prima del della risposta prima di inviarlo al browser. – andrewmu