Otwieram modalne okno podręczne. Następnie uzyskuję dostęp do pola tekstowego okna nadrzędnego i innych atrybutów za pomocą window.opener
. Działa dobrze w firefoxie, ale nie w IE8. Daje błąd 'window.opener ma wartość null'. Jak uzyskać dostęp do atrybutów okna nadrzędnego w oknie podrzędnym, które działa w obu przeglądarkach.alternatywy window.opener
Odpowiedz
Możesz przekazywać argumenty, aby pokazać funkcję ModalDialog. Po prostu przekazuj obiekt okna jako argument.
window.showModalDialog(theURL, window);
Yo może uzyskać dostęp do argumentów z okna modalnego za pomocą dialogArguments. Zobacz: http://msdn.microsoft.com/en-us/library/ms533723%28VS.85%29.aspx
var openerWindow = window.dialogArguments;
Powinienem chyba zauważyć, że działa to w IE i FF i prawdopodobnie także w innych przeglądarkach. – Kaitnieks
showModalDialog jest przestarzały przez chromium 35 (lipiec 2014). Zobacz http://blog.chromium.org/2014/07/disabling-showmodaldialog.html i http://blog.chromium.org/2014/04/chrome-35-beta-more-developer-control.html – edigu
podejścia wziąłbym jest następujący:
- użyć istniejącej biblioteki JavaScript UI, bo nie jesteś pierwszą osobą, która kiedykolwiek chcesz to zrobić, w razie braku
- Tworzenie funkcji o nazwie
OpenWindow
, że przeglądarka wącha dla metody
na przykład window.opener
:
if(window.opener == undefined) {
//probably not Firefox...
}
i jeśli go znajdzie, to użyje go, w przeciwnym razie przetestuje wariant IE i użyje go. A następnie sprawdza wersję przeglądarki Safari, itp ...
Istnieją dwa sposoby rozwiązania problemu: Uwaga: „window.opener” nie jest obsługiwana przez IE jeśli „showModalDialog” jest używana.
1) Zamiast "window.showModalDialog" użytkowania "window.open"
2) Jeśli chcesz używać "window.showModalDialog", a następnie wykonaj następujące czynności:
<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>
Wyłącz "Tryb chroniony" programu Internet Explorer, który uniemożliwia dostęp do tego obiektu.
Kroki tego są:
- Naciśnij Alt + T, aby wyświetlić menu Narzędzia
- kliknij "Opcje internetowe"
- Wybierz "Security" kartę
- Upewnij strefa wybrany zawiera Twoja strona. W przypadku witryny intranetowej zwykle będzie to strefa "Lokalny intranet".
- Odznacz "Włącz tryb chroniony"
- Zamknij wszystkie karty IE i okna i ponownie otwórz.
Teraz powinno być możliwe uzyskanie dostępu do obiektu window.opener.
Jako alternatywę cross-browser, można dać atrybut niestandardowy do nowego okna podczas otwierania go:
var popup = window.open(...);
popup.isPopup = true;
następnie w określoną stronę:
if (window.isPopup) {
// Do something
}
else {
// Not in a popup
}
Próbowałeś window.parent.opener? –
Próbuję go window.parent.opener, ale nie mogę uzyskać dostępu do obiektu dokumentu nadrzędnego. Przekazuję parent.document jako argument i uzyskuję parent.document w popup jako window.dialogArguments.parentDocumentObj gdzie parentDocumentObj jest nazwą zmiennej, która zawiera dokument. – dmay