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
risposta
È 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;
Probabilmente dovrei notare che questo funziona in IE e FF e probabilmente anche in altri browser. – Kaitnieks
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
L'approccio vorrei prendere è la seguente:
- Utilizzare una libreria JavaScript interfaccia utente esistente perché non sei la prima persona a voler mai fare questo, in mancanza di questo
- creare una funzione chiamata
OpenWindow
, quel browser annusa per lawindow.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 ...
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>
Disabilita la "Modalità protetta" di Internet Explorer, che impedisce l'accesso a questo oggetto.
I passaggi per questo sono:
- Premere Alt + T per visualizzare il menu Strumenti
- Fare clic su "Opzioni Internet"
- Selezionare la scheda "Protezione"
- Assicurarsi zona sicura selezionato contiene il tuo sito. Per un sito intranet si tratta in genere della zona "Intranet locale".
- Deselezionare "Abilita modalità protetta"
- Chiudere tutte le schede e finestre di IE e riaprire.
Ora dovresti essere in grado di accedere all'oggetto window.opener.
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
}
Hai provato window.parent.opener? –
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