2011-02-03 10 views
19

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.alternative window.opener

+0

Hai provato window.parent.opener? –

+0

provo window.parent.opener ma non riesco ad accedere all'oggetto documento genitore. Passo parent.ocument come argomento e accedo parent.document in popup come window.dialogArguments.parentDocumentObj dove parentDocumentObj è il nome della variabile che contiene il documento. – dmay

risposta

7

È possibile passare argomenti alla funzione showModalDialog. Basta passare l'oggetto finestra come argomento.

window.showModalDialog(theURL, window); 

Yo può accedere agli argomenti dalla finestra modale utilizzando dialogArguments. Vedere: http://msdn.microsoft.com/en-us/library/ms533723%28VS.85%29.aspx

var openerWindow = window.dialogArguments; 
+0

Probabilmente dovrei notare che questo funziona in IE e FF e probabilmente anche in altri browser. – Kaitnieks

+3

showModalDialog è obsoleto da chromium 35 (luglio 2014). Vedi http://blog.chromium.org/2014/07/disabling-showmodaldialog.html e http://blog.chromium.org/2014/04/chrome-35-beta-more-developer-control.html – edigu

0

L'approccio vorrei prendere è la seguente:

  1. Utilizzare una libreria JavaScript interfaccia utente esistente perché non sei la prima persona a voler mai fare questo, in mancanza di questo
  2. creare una funzione chiamata OpenWindow, quel browser annusa per la window.opener metodo di

Ad esempio:

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

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

8

Ci sono due modi per risolvere il problema: Nota: "window.opener" non è supportata da IE, se è stato utilizzato "showModalDialog".

1) Al posto di "window.showModalDialog" usano "window.open"

2) Se si desidera utilizzare "window.showModalDialog", quindi effettuare le seguenti operazioni:

<script language="javascript" type="text/javascript"> 
    function YourFunction() 
    { 
     var opener = null; 

     if (window.dialogArguments) // Internet Explorer supports window.dialogArguments 
     { 
      opener = window.dialogArguments; 
     } 
     else // Firefox, Safari, Google Chrome and Opera supports window.opener 
     {   
      if (window.opener) 
      { 
       opener = window.opener; 
      } 
     }  
     // write you code and refer "opener" 
     window.close(); 
    } 
</script> 
2

Disabilita la "Modalità protetta" di Internet Explorer, che impedisce l'accesso a questo oggetto.

I passaggi per questo sono:

  1. Premere Alt + T per visualizzare il menu Strumenti
  2. Fare clic su "Opzioni Internet"
  3. Selezionare la scheda "Protezione"
  4. Assicurarsi zona sicura selezionato contiene il tuo sito. Per un sito intranet si tratta in genere della zona "Intranet locale".
  5. Deselezionare "Abilita modalità protetta"
  6. Chiudere tutte le schede e finestre di IE e riaprire.

Ora dovresti essere in grado di accedere all'oggetto window.opener.

0

come un cross-browser alternativo, si può dare un attributo personalizzato per la nuova finestra, mentre si sta aprendo è:

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

Poi, nella pagina di cui:

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