2009-09-30 11 views
5

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 impostare document.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

risposta

1

Puoi usare jQuery? C'è un bel plugin che ti permette di fare window.postMessage attraverso un iframe in IE 6-8: http://benalman.com/code/test/js-jquery-postmessage/

Puoi aprire il popup dall'iframe e passare l'oggetto tra iframe e genitore con postMessage.

+0

Questo è probabilmente il mio miglior scatto. Grazie. – gustafc

0

non posso leggere la proprietà window.location.protocol prima di impostare document.domain e quindi utilizzare tale valore al condizionale assegnazione; così facendo mi richiederebbe per ricostruire le librerie di framework web - non qualcosa che voglio fare.

non è possibile leggere window.location.protocol prima di impostare document.domain e impostare window.location.protocol una volta che diventa di sola scrittura? Ciò richiederebbe anche una ricostruzione della struttura? è un hack ma anche IE.

+0

Sfortunatamente, non funziona. Rimane solo in scrittura anche dopo averlo scritto. – gustafc

Problemi correlati