2011-02-03 14 views
19

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

+0

Próbowałeś window.parent.opener? –

+0

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

Odpowiedz

7

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; 
+0

Powinienem chyba zauważyć, że działa to w IE i FF i prawdopodobnie także w innych przeglądarkach. – Kaitnieks

+3

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

0

podejścia wziąłbym jest następujący:

  1. użyć istniejącej biblioteki JavaScript UI, bo nie jesteś pierwszą osobą, która kiedykolwiek chcesz to zrobić, w razie braku
  2. 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 ...

8

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> 
2

Wyłącz "Tryb chroniony" programu Internet Explorer, który uniemożliwia dostęp do tego obiektu.

Kroki tego są:

  1. Naciśnij Alt + T, aby wyświetlić menu Narzędzia
  2. kliknij "Opcje internetowe"
  3. Wybierz "Security" kartę
  4. Upewnij strefa wybrany zawiera Twoja strona. W przypadku witryny intranetowej zwykle będzie to strefa "Lokalny intranet".
  5. Odznacz "Włącz tryb chroniony"
  6. Zamknij wszystkie karty IE i okna i ponownie otwórz.

Teraz powinno być możliwe uzyskanie dostępu do obiektu window.opener.

0

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 
}