alternative window.opener

Sto aprendo una finestra popup modale. Quindi accedo alla casella di testo della finestra principale e ad altri attributi usando window.opener . Funziona bene in Firefox ma non in IE8. Dà errore ‘window.opener è null’ . Come posso accedere agli attributi della finestra genitore nella finestra secondaria che funziona in entrambi i browser.

È ansible passare argomenti alla funzione showModalDialog. Basta passare l’object finestra come argomento.

 window.showModalDialog(theURL, window); 

È ansible accedere agli argomenti dalla finestra modale utilizzando dialogArguments. Vedi: http://msdn.microsoft.com/en-us/library/ms533723%28VS.85%29.aspx

 var openerWindow = window.dialogArguments; 

Esistono due modi per risolvere il problema: Nota: ” window.opener ” non è supportato da IE se ” showModalDialog ” è stato utilizzato.

1) Invece di ” window.showModalDialog ” usa ” window.open

2) Se si desidera utilizzare ” window.showModalDialog “, effettuare le seguenti operazioni:

  

Distriggers la “Modalità protetta” di Internet Explorer, che impedisce l’accesso a questo object.

I passaggi per questo sono:

  1. Premi Alt + T per visualizzare il menu Strumenti
  2. Fai clic su “Opzioni Internet”
  3. Seleziona la scheda “Sicurezza”
  4. Assicurati che la zona selezionata contenga il tuo sito. Per un sito intranet si tratta in genere della zona “Intranet locale”.
  5. Deseleziona “Abilita modalità protetta”
  6. Chiudi tutte le tabs e windows di IE e riapri.

Ora dovresti essere in grado di accedere all’object window.opener.

L’approccio che prendo è il seguente:

  1. Utilizza una libreria UI JavaScript esistente perché non sei la prima persona che abbia mai voluto farlo, in caso contrario
  2. Crea una funzione chiamata OpenWindow , che il browser annusa per il metodo window.opener

Per esempio:

 if(window.opener == undefined) { //probably not Firefox... } 

e se lo trova poi lo usa, altrimenti verifica la variante IE e la usa. E poi controlla la versione di Safari, ecc …

Come alternativa cross-browser, puoi dare un attributo personalizzato alla nuova finestra mentre lo stai aprendo:

 var popup = window.open(...); popup.isPopup = true; 

Quindi, nella pagina di riferimento:

 if (window.isPopup) { // Do something } else { // Not in a popup }