«PageShow» не получается при нажатии кнопки «Назад» в Safari на «IPad»

У меня есть следующий обработчик:

<code>        $(window).bind('pageshow', function() { alert("back to page"); });
</code>

Когда я покидаю страницу (нажимая на ссылку) и возвращаюсь на страницу (нажимая«Назад» кнопка), тоОповещение () не называется (iPad 2, iOS 5.1).

Что я делаю не так, пожалуйста? Любое другое событие мне нужно связать?

PS: интересно чтоpagehide принимается правильно при переходе от страницы.

Ответы на вопрос(3)

Вы можете проверитьpersisted собственностьpageshow мероприятие. При начальной загрузке страницы устанавливается значение false. Когда страница загружается из кэша, она имеет значение true.

window.onpageshow = function(event) {
    if (event.persisted) {
        alert("back to page");
    }
};

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

$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
      alert("back to page");
    }
};
 Anon Dev03 мая 2016 г., 15:24
Просто оставив сообщение, чтобы сообщить, что эта проблема сохраняется в Safari для iOS 9.3, правильный ответ пока не найден.
 giskard2213 дек. 2013 г., 20:09
Похоже, это должен быть правильный ответ, но браузеры, которые я пробовал (Safari 7 и Firefox 26 в Mac OS 10.9), никогда не устанавливали постоянное значение true, даже если они фактически не перезагружаются с сервера. (На данный момент я даже не желаю доверять их собственным инструментам разработчика, поэтому я использовал Wireshark для проверки. Я отправляю заголовки управления кэшем, чтобы сделать страницу не кешируемой, и Safari утверждает, что не использует кеш, но Wireshark не показывает трафик на сервер, когда я нажимаю Назад.)
 Mika Tuupola18 дек. 2013 г., 17:09
Похоже, событие onpageshow вообще не запускается с 6.1.1. при нажатии кнопки назад ...
 Georgii Ivankin14 нояб. 2016 г., 23:04
опущено, поскольку это не отвечает на вопрос
 Mika Tuupola16 дек. 2013 г., 17:46
Что-то изменилось в Safari 7 тогда. Только что протестировано, и event.persisted установлен в true в Safari 6.

что вы делаете, привязывает возвращаемое значениеalert("back to page") в качестве обратного вызова. Это не сработает. Вам нужно связать функцию вместо:

$(window).bind('pageshow', function() { alert("back to page"); });
 jfroom26 июл. 2012 г., 00:39
Это ценная идея. Спасибо.
 BreakPhreak11 апр. 2012 г., 15:21
извините, спасибо за исправление - попробовал это также безуспешно (фактически, мой домашний пример включал функцию обратного вызова, а не фактический вызов). Главный вопрос отредактирован.
 lox28 апр. 2012 г., 23:48
Наконец, кое-что, что работало для кнопки возврата iPhone Safari. Благодарю.
 NaN27 авг. 2012 г., 00:54
Подтвердили, что это работает на Safari iOS 5.1. Спасибо!

это проблема кеширования. Когда вы возвращаетесь на страницу с помощью кнопки «назад», страница извлекается из кэша (поведение зависит от браузера). Из-за этого ваш JS не будет запускаться, так как страница уже визуализирована в кеше, и повторный запуск JS может быть вреден для макета и тому подобного.

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

Вот несколько ссылок по этому вопросу:

При нажатии кнопки «Назад» происходит событие кросс-браузерной загрузки?После путешествия в историю Firefox JavaScript не будет работать

РЕДАКТИРОВАТЬ

Все они взяты из приведенных выше ссылок:

history.navigationMode = 'compatible';<body onunload=""><!-- This does the trick -->«Firefox 1.5+ и некоторая следующая версия Safari (которая содержит исправление для ошибки 28758) поддерживает специальные события, называемыеpageshow а такжеpagehide«.Использование jQuery$(document).ready(handler)window.onunload = function(){};
 Brandon Boone11 апр. 2012 г., 16:33
@BreakPhreak - см. Мое редактирование.
 BreakPhreak11 апр. 2012 г., 16:21
Благодарю. Я подозревал, что это происходит из-за проблем с кэшированием. Кроме того, ЕСЛИ я прав -Pageload а такжеpagehide это просто "уловки", которые должны выполнять работу (но они, кажется, не работают), не могли бы вы быть более конкретным в отношении других уловок, которые я не знаю? Ах, и я не могу изменить заголовки кэширования в моем случае.

Ваш ответ на вопрос