Выгрузка HTML-страницы не всегда вызывается в IE - PullRequest
1 голос
/ 12 марта 2012

У меня есть метод onunload, написанный на теле формы.Поскольку страница получает большое количество содержимого для потоковой передачи с сервера, загрузка всей формы занимает некоторое время.Хотя форма загружается в браузер, если пользователь нажимает кнопку закрытия окна, событие unload (записываемое для вызова действия на стороне сервера для сброса какого-либо флага) иногда не запускается.Метод unload написан ближе к концу страницы, это причина для этого?В любом случае, мы можем быть уверены, что onunload будет вызываться?

Ответы [ 3 ]

1 голос
/ 18 ноября 2013

Вероятно, вас поразил тот факт, что IE не запускает событие unload, если window.onload еще не сработал.Решение описано в этом сообщении в блоге: http://blog.moxiecode.com/2008/04/08/unload-event-never-fires-in-ie/

0 голосов
/ 12 марта 2012

IE имеет событие onbeforeunload, вы можете использовать его вместо этого. Просто установите флажок, чтобы ваш onunload мог выйти раньше, если onbeforeunload уже сделал свое дело.

window.onunload = window.onbeforeunload = function () {
    if (window.isAlreadyUnloaded) return;
    window.isAlreadyUnloaded = true;
    // do your stuff here.
}
0 голосов
/ 12 марта 2012

Есть две причины. Во-первых, как вы сказали, браузер может даже не дойти до разгрузки, поэтому вы должны объявить его над тегом body.

Другая причина заключается в том, что, как уже говорилось в GoldenNewby, необходимо дать коду некоторое время для завершения, например, предупреждение. Это связано с тем, что JavaScript очищается из памяти в тот момент, когда следующая страница готова, и выполнение старого сценария просто останавливается. Если вы можете гарантировать, что сценарий займет меньше времени, чем загрузка страницы, вам не понадобится предупреждение, но если для его выполнения может потребоваться более 2 мсек, вам потребуется некоторое время.

...