Как узнать, когда всплывающее окно закрыто в JavaScript - PullRequest
1 голос
/ 02 октября 2010

Этот код откроет go.com во всплывающем окне:

<a href="javascript:void(0)" onClick="javascript:window.open('http://go.com','','status=yes,scrollbars=yes,toolbar=no,menubar=no,location=no ,width=300px,height=300px')">open</a>

и я хочу использовать alert('closed!') на главной странице, когда всплывающее окно закрыто, и я не могу редактировать всплывающую страницу для использования onunload="alert('closed!')", потому что всплывающая страница является внешней страницей, и я не могу изменить код, например

var mywindow = window.open('http://go.com') ...

Спасибо.

Ответы [ 3 ]

1 голос
/ 02 октября 2010

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

Некоторые недостатки: в адресной строке не будет отображаться URL-адрес, который они просматривают, и он также может сломаться, если на go.com есть какой-то код очистки фрейма.

Пример кода:

function openIFrameInWindow(url) {
    var myWindow = window.open("");

    var iframe = document.createElement("iframe");
    iframe.src = url;

    myWindow.document.body.appendChild(iframe); 

    myWindow.document.body.onbeforeunload = function () { alert("WINDOW CLOSED") }; 
}

<a href="javascript:void(0)" onClick="javascript:openIFrameInWindow('http://go.com')">open</a>
0 голосов
/ 02 октября 2010

Когда всплывающее окно закрыто, вы можете сообщить об этом открывающему окну, используя свойство window.opener.

Итак:

//pseudocode in pop-up window
onClose() {
 window.opener.popUpClosed = true;
}

Теперь на вашей странице открылось всплывающее окно.Вы можете проверить значение переменной popUpClosed.

Подробнее о свойстве opener здесь: http://www.webreference.com/js/tutorial1/opener.html

0 голосов
/ 02 октября 2010

Как насчет проверки состояния окна каждую 1 секунду, чтобы увидеть, было ли оно закрыто?Пример кода, не тестировался:

var mywindow= window.open();
checkmywindow();

function checkmywindow()
{
   if(mywindow.closed)
   {
      //code when popup is closed
   }
   else
   {
      setTimeout("checkmywindow();", 1000);
   }
}
...