Закрытие всплывающего окна

#javascript #window

#javascript #окно

Вопрос:

Я нашел код, который позаботится об открытии всплывающего окна, которое мне нужно:

  function winOpen(theURL, Name, popW, popH, scroll) { // V 1.0
 var winleft = (screen.width - popW) / 2;
 var winUp = (screen.height - popH) / 2;
 winProp =
'width=' popW ',height=' popH ',left=' winleft ',t op=' winUp ',scrollbars=' scroll ','
  Win = window.open(theURL, Name, winProp)
    if (parseInt(navigator.appVersion) >= 4){
      Win.window.focus();
   }
  

Возможно ли включить сюда функции, которые выполняются при закрытии окна, или для этого требуется где-то отдельный вызов функции? Я вызываю window open по ссылке html.

Ответ №1:

Страница, которую вы показываете внутри всплывающего окна, может иметь обработчик событий, прикрепленный к body ‘s onunload или onbeforeunload (я думаю, что это только IE). Это сработает, если документ выгрузится (кто бы мог подумать?). Если у вас нет ссылок внутри документа, которые будут его выгружать, вы можете использовать это событие как индикатор того, что ваше окно было закрыто.

Вторая возможность: добавить сторожевой таймер.

 var watcherID = setInterval(function()
{
  if (Win.closed)
  {
    clearTimeout(watcherID);
    // Do what you have to do.
  }
}, 400);
  

Ответ №2:

Вы должны сделать небольшой отступ в своем коде, чтобы сделать его более читаемым. Кроме того, вы можете использовать win.closed , чтобы увидеть, что оно закрыто onunload , но обязательно подождите немного, прежде чем проверять:http://jsfiddle.net/9PYWj /.

 function winOpen(theURL, Name, popW, popH, scroll) { // V 1.0
    var winleft = (screen.width - popW) / 2,
        winUp   = (screen.height - popH) / 2,

        winProp = 'width='   popW 
                     ',height='   popH 
                     ',left='   winleft 
                     ',top='   winUp 
                     ',scrollbars='   scroll   ',',

        win     = window.open(theURL, Name, winProp);

    win.onunload = function() {
        setTimeout(function() {
            if(win.closed) {
                alert(123);
            }
        }, 100);
    };

    win.focus();
}