Проверьте окно браузера закрыто - PullRequest
0 голосов
/ 26 января 2012

У меня есть веб-страница с кнопкой, которая открывает другое окно.

Когда кнопка нажата и новая страница открыта, я отключаю кнопку (поскольку нужно открыть только одну страницу, нажавкнопка).Я использую window.open(), а не windows.showModalDialog(), потому что пользователь должен работать на обеих страницах.

Когда вторая страница закрыта, мне нужно повторно включить кнопку на первой странице.

Я пробовал что-то вроде этого:

    var win = window.open("SecondPage.htm");
    // disable button        
    while (!win.closed) {
        setTimeout('', 2000);
    }
    // re-enable button

Но использование цикла while слишком сильно замедляет работу браузера, поэтому на первой странице фактически невозможно работать ...

есть лучшее решение моей проблемы?

Ответы [ 4 ]

0 голосов
/ 26 января 2012

Этот код Конерака не решает проблему потери ресурсов процессора и памяти. При использовании setTimeout вы также должны использовать clearTimeout(), в противном случае таймеры будут активны, пока открыто top.window. Исправьте код так:

var win = window.open("SecondPage.htm");
var delay;
// disable button        

delay=setTimeout('enableButtonIfWindowClosed', 2000);
function enableButtonIfWindowClosed {
  if(delay) clearTimeout('delay');
  if (windowClosed()) {
    enableButton();
  }
  else {
    setTimeout('enableButtonIfWindowClosed', 2000);
    //function recalls the function itself
  }
}

и более сложные:

var win = window.open("SecondPage.htm");
var delay;
// disable button
delay=setInterval('enableButtonIfWindowClosed', 2000);
function enableButtonIfWindowClosed {
  if (windowClosed()) {
    if(delay) clearInterval('delay');
    enableButton();
  }
}

Нет ресурсов процессора и памяти.

0 голосов
/ 26 января 2012

Полагаю, вы можете связать событие с unload или beforeunload событиями:

win.onunload = function() {
    // re-enable button
};

Но это также будет вызываться, если пользователь загружает другую страницу в окне, поэтому вы все равно хотите проверить win.closed внутри обработчика событий.

0 голосов
/ 26 января 2012

Если вы обрабатываете javascript, пользователь обновит страницу 1. Это не удастся. Так что при использовании нажмите на ссылку на странице 2, сделайте вызов ajax сохраненным на сервере, чтобы кнопка отключена, и сделайте для кнопки атрибут кнопки, например

* 1002.*
0 голосов
/ 26 января 2012
setTimeout('', 2000)

- это НЕ sleep()

Ваш цикл while продолжает вращаться и действительно потребляет весь ЦП, тем самым замедляя работу браузера.

Лучше:

var win = window.open("SecondPage.htm");
// disable button        
setTimeout('enableButtonIfWindowClosed', 2000);

function enableButtonIfWindowClosed {
  if (windowClosed()) {
    enableButton();
  }
  else {
    setTimeout('enableButtonIfWindowClosed', 2000);
    //function recalls the function itself
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...