window.onunload срабатывает только тогда, когда в Firefox закрыта вкладка, а не весь браузер - PullRequest
3 голосов
/ 07 октября 2010

UPDATE

Итак, прочитав оба ваших ответа, я понимаю, что нет надежного способа определить, когда окно браузера закрыто.Первоначально я планировал использовать это, чтобы разблокировать запись в базе данных, когда страница закрыта.Обычно, когда пользователь загружает страницу, запись, к которой он обращается, блокируется, а затем разблокируется, когда страница закрывается.Любые предложения о том, как сделать это по-другому / лучше?Я думал о том, чтобы просто опубликовать на странице уведомление о том, что им нужно использовать кнопку закрытия, чтобы закрыть форму, а не X, и если они действительно закрывают, используя X, запись остается заблокированной, скажем, 5 минут, пока они не смогут получить к ней доступснова.

Этот код очень прост, потому что я только что его протестировал.В основном, когда я запускаю эту страницу в IE и Chrome, предупреждение срабатывает просто отлично.Когда я запускаю его в Firefox на одной вкладке и закрываю весь браузер, предупреждение никогда не срабатывает.Однако, если у меня есть несколько вкладок, и я открываю страницу как новую вкладку, а затем закрываю ее, используя X на вкладке, срабатывает предупреждение.Кто-нибудь знает, что там делает Firefox?

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

<html>
<head runat="server">
    <title></title>
    <script type="text/javascript">

        window.onunload = function() {
            alert("unload event detected!");
        }

    </script>
</head>
<body>
</body>
</html>

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

Вы не можете рассчитывать на onunload обработчики, запускаемые вообще (это не только Firefox).onbeforeunload обработчики немного более надежны, но незначительно.

Обновление Ответ на ваш дополнительный вопрос: если у вас есть доиспользуйте блокировку, тогда да, я бы определенно использовал тайм-аут на стороне сервера (у вас нет другого выбора; если, например, на рабочих станциях голубые экраны пользователя, вы хотите, чтобы эта запись была разблокирована в какой-то момент).Вы, вероятно, захотите сбросить время ожидания в любое время, когда вы видите активность пользователя (вы можете использовать пинг ajax, когда страница открыта) и, как вы сказали, дать пользователю возможность явного освобождения записи.Как долго этот тайм-аут должен зависеть от вас, но если вы используете механизм пинга ajax, нет причин, по которым он может даже потребоваться пять минут - вы можете сделать один минутный тайм-аут и 30-секундный пинг ajax, или даже30-секундный таймаут и 15-секундный пинг, что угодно.Зависит от того, какую нагрузку вы хотите поставить на сервер.

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

Firefox закрывается сразу после нажатия кнопки X, чтобы закрыть браузер. По какой-то причине он «забывает» вызывать событие onunload.

...