Ho una situazione in cui viene visualizzata una pagina www.example.com/index.htmlhome.example.com/foo .html in una finestra popup. Quando l'utente chiude il popup, voglio avvisare la pagina di apertura chiamando una funzione Javascript su di essa (che fa alcune cose con il DOM). Io uso unbeforeunload
come questo:Lettura window.location dopo aver impostato document.domain in IE (6)
// In index.html on www.example.com:
window.fn = function() { /* Perform stuff after foo.html has closed */ }
// In foo.html on home.example.com:
window.onbeforeunload = function() {
if (window.opener && window.opener.fn)
window.opener.fn();
};
Questo non funziona perché le pagine web sono in domini diversi. Posso impostare la proprietà document.domain
per superare questo:
document.domain = "example.com";
Purtroppo, questo non gioca bene con il quadro web app che uso sul lato foo.html (Apache Wicket), in quanto include uno script che fa qualcosa di simile:
var src = (window.location.protocol == 'https:') ? something : other;
a quanto pare, in IE6 *, quando si imposta il dominio dei documenti, l'oggetto location
diventa di sola scrittura, e quindi cercando di leggere window.location.protocol
tiri "Accesso negato".
Quindi, la mia domanda è: In che modo è possibile consentire le chiamate di funzioni JavaScript tra domini pur consentendo ai miei script di leggere il contenuto dell'oggetto location
?
- Impossibile accedere tramite il server. (Il lavoro eseguito dalla funzione che desidero chiamare non funziona in questo modo.)
- Non riesco a leggere la proprietà
window.location.protocol
prima di impostaredocument.domain
e quindi utilizzare tale valore nell'assegnazione condizionale; così facendo mi richiederebbe di ricostruire le librerie del framework web, non qualcosa che voglio fare.
* Possibilmente in altre versioni di IE, troppo; non ho controllato
Questo è probabilmente il mio miglior scatto. Grazie. – gustafc