Обновить родительское окно при закрытом всплывающем окне

Есть ли способ обновить родительское окно, когда всплывающее окно закрывается без добавления какого-либо кода javascript во всплывающее окно?

У меня есть страница parent.php, на которой пользователи могут нажать "открыть всплывающее окно", чтобы открыть всплывающее окно. Это всплывающее окно показывает некоторый флэш-контент, и для меня невозможно добавить что-то вроде

window.onunload = function(){ 
  window.opener.location.reload(); 
}; 

на разметку страницы всплывающего окна.

Есть ли какой-либо другой способ достижения этого? Благодаря

Ответ 1

Чтобы сделать эту работу во всех основных браузерах, вам нужно обработать обработчик событий unload во всплывающем окне и выполнить перезагрузку в главном окне. В главном окне добавьте

function popUpClosed() {
    window.location.reload();
}

В всплывающем окне:

window.onunload = function() {
    if (window.opener && !window.opener.closed) {
        window.opener.popUpClosed();
    }
};

Таким образом, ответ на ваш вопрос обычно отсутствует, если вам нужен ваш код для работы во всех браузерах, в частности IE.

Ответ 2

Я уверен, что вы можете просто добавить это в parent.php:

var myPop = "pop up window selector"
myPop.onunload = function(){ 
  location.reload(); 
}; 

Ответ 3

Проблема с методом Tim Down заключается в том, что он не отвечает на исходный вопрос. Требование состоит в том, чтобы вы не могли добавлять код во всплывающее окно.

Одно из решений, которое я нашел, хотя и не особенно элегантный, эффективно для всех браузеров, на которых я тестировал.

Вы будете просто проверять только что созданный объект окна, проверяя, все ли он открыт.

В родительском окне:

  var register;
  var poll;

  function isOpen(){
      if(register.closed){alert("Closed!"); clearInterval(poll);}
  }


  function create(){

      register = window.open("http://www.google.com","register","width=425,height=550");
      poll=setInterval("isOpen()",100); //Poll every 100 ms.
}

Ответ 4

имела аналогичную проблему, чтобы обнаружить закрытие всплывающего окна в родительском окне. Я думаю, причина в том, что не устанавливая свойство document.domain.

любым способом добавить в Tim Down ответ на свойство document.domain как для окна, так и для всплывающего окна следующим образом:

    <script type="text/javascript">
        document.domain='<?=$_SERVER['SERVER_NAME']?>';
    </script> 

и вместо

 window.onunload = function() {
     if (window.opener && !window.opener.closed) {
        window.opener.popUpClosed();
     }
 };

Я использовал во всплывающем окне:

     <body onunload="window.opener.popUpClosed();">