onpagehide событие на iPad Safari - PullRequest
       1

onpagehide событие на iPad Safari

4 голосов
/ 16 сентября 2011

Поскольку в iPad Safari есть некоторые проблемы с событиями onunload и onbeforeunload, я обнаружил эквивалентную проблему для iPad (pagehide), указанную в списке:

http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

Теперь мой вопрос;1. Является ли pagehide равным образом для выгрузки ИЛИ перед загрузкой событий?2. Я использую вызов DWR (проще говоря, это вызов AJAX) внутри этого обработчика событий страницы:

someObj.saveData(jsonString,{async:false});

Здесь saveData () на самом деле является функцией Java, которая сохраняет данные.Теперь, пожалуйста, пожалуйста ... я понимаю, что это "ПЛОХАЯ ПРАКТИКА" для сохранения данных о событиях выгрузки ... Но это уже закодировано в моем приложении, и я не могу его изменить ..

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

1 Ответ

3 голосов
/ 31 августа 2015

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

pagehide запускается, когда активная страница«приостановлен», например, на диск.

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

pagehide была введена потому, что производители браузеров пытались приостановить и возобновить страницы для кэширования (вместо их перезагрузки), но обнаружили, что когда они вызывают событие unload, многие страницы предпринимают разрушительные действия, которые не позволяют страницевозобновляется позже.Таким образом, они придумали pagehide в качестве аналогичной, но другой альтернативы.

Я понимаю, что это «ПЛОХАЯ ПРАКТИКА» для сохранения данных о событиях выгрузки

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

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

Код Javascript, вызываемый из beforeunload или unload, обычно является последним фрагментом скрипта, который будет выполнятьсяВаша страница, прежде чем она будет закрыта.Вот почему, если вам нужен ответ от сервера, синхронный запрос является единственным вариантом (в противном случае ответ никогда не будет обработан).После завершения события страница уничтожается.Событие pagehide аналогично, за исключением того, что страница не будет уничтожена, но вместо этого она будет сериализована и сохранена где-то, поэтому ее можно будет загрузить и возобновить позже.

Из этого следует, что вы не должны выполнять какую-либо логику «очистки», такую ​​как уничтожение объектов и т. Д. В событии pagehide.

Более подробную информацию можно найти в этомсообщение в блоге от команды WebKit, когда они создавали событие pagehide: Кэш страницы WebKit II - событие выгрузки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...