альтернативы window.opener - PullRequest
       18

альтернативы window.opener

19 голосов
/ 03 февраля 2011

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

Ответы [ 5 ]

9 голосов
/ 22 июня 2011

Существует два способа решения проблемы: Примечание: " 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>
7 голосов
/ 03 февраля 2011

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

window.showModalDialog(theURL, window);

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

var openerWindow = window.dialogArguments;
1 голос
/ 20 июня 2014

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

Шаги для этого:

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

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

0 голосов
/ 08 марта 2018

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

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

Затем на указанной странице:

if (window.isPopup) {
  // Do something
}
else {
  // Not in a popup
}
0 голосов
/ 03 февраля 2011

Подход, который я выбрал бы, следующий:

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

Например:

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

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

...