2011-02-03 3 views
19

Я открываю модальное всплывающее окно. Затем я обращаюсь к текстовому полю родительского окна и другим атрибутам, используя window.opener. Он отлично работает в firefox, но не в IE8. Он дает ошибку 'window.opener is null'. Как получить доступ к атрибутам родительского окна в дочернем окне, которое работает в обоих браузерах.window.opener alternatives

+0

Вы пробовали window.parent.opener? –

+0

Я пытаюсь его window.parent.opener, но я не могу получить доступ к объекту родительского документа. Я передаю parent.document как аргумент и получаю parent.document в popup как window.dialogArguments.parentDocumentObj где parentDocumentObj - это имя переменной, которая содержит документ. – dmay

ответ

7

Вы можете передать аргументы функции showModalDialog. Просто передайте объект окна в качестве аргумента.

window.showModalDialog(theURL, window); 

Yo может получить доступ к аргументам из модального окна с помощью dialogArguments. См: http://msdn.microsoft.com/en-us/library/ms533723%28VS.85%29.aspx

var openerWindow = window.dialogArguments; 
+0

Должен заметить, что это работает в IE и FF и, возможно, в других браузерах. – Kaitnieks

+3

showModalDialog устарел от хрома 35 (июль 2014 г.). См. Http://blog.chromium.org/2014/07/disabling-showmodaldialog.html и http://blog.chromium.org/2014/04/chrome-35-beta-more-developer-control.html. – edigu

0

подход, который я бы заключается в следующем:

  1. Используйте существующую библиотеку JavaScript UI, потому что вы не первый человек, который когда-либо хотите сделать это, в противном случае, что
  2. Создайте функцию под названием OpenWindow, что браузер нюхает для window.opener метода

Например:

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

, и если он находит его, он использует его, иначе он проверяет вариант IE и использует его. А затем он проверяет версию сафари, и т.д ...

8

Есть два пути решения проблемы: Примечания: «window.opener» не поддерживается IE, если «ShowModalDialog» будет использован.

1) Вместо "window.showModalDialog" использовать "window.open"

2) Если вы хотите использовать "window.showModalDialog", то сделайте следующее:

<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

Отключить защищенный режим Internet Explorer, который предотвращает доступ к этому объекту.

Шаги для этого являются:

  1. Нажмите Alt + T, чтобы показать в меню Инструменты
  2. нажмите «Свойства обозревателя»
  3. Выберите вкладку «Безопасность»
  4. Убедитесь зона выбрана содержит твой сайт. Для сайта интрасети это, как правило, зона «Местная интрасеть».
  5. Untick «Включить защищенный режим»
  6. Закройте все вкладки и окна IE и откройте их снова.

Теперь у вас должен быть доступ к объекту window.opener.

0

В качестве альтернативы кроссбраузерной, вы можете дать пользовательский атрибут в новом окне, когда вы открываете его:

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

Затем в упомянутой странице:

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