onbeforeunload в сафари не запускает код на стороне сервера

При закрытии браузера или F5 мне нужно выполнить некоторый код на стороне сервера. Для этого у меня есть кнопка. При нажатии этой кнопки, для которой написаны функции onclientclick и onclick. Я также написал событие для window.onbeforeunload, которое выполняет функцию button.click().

window.onbeforeunload=function(e)
{
   button.click()
}

Моя проблема в том, что это запускает код функции щелчка кнопки на стороне клиента, однако код на стороне сервера не выполняется. Это происходит только тогда, когда я закрываю браузер. Когда я делаю F5, он работает отлично. Также это происходит только в Safari. В ФФ и Мозиле работает отлично. Как я могу


person Deepa    schedule 14.06.2010    source источник
comment
Как вы вызываете свой серверный код? Как выглядит ваш обработчик кликов?   -  person Pointy    schedule 14.06.2010


Ответы (3)


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

person Gus    schedule 12.08.2010

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

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

person Aaron Harun    schedule 14.06.2010
comment
Это неправда — мобильное Safari не распознает onbeforeunload, а настольное Safari — распознает. - person Amalgovinus; 02.10.2013

как любопытство, проблема здесь в том, что Safari не распознает событие onbeforeunload... поэтому любой код не будет запускаться в Safari. Вы можете использовать событие onunload, но здесь вы никогда не сможете предотвратить закрытие страницы.

person lcabral    schedule 15.12.2010