Подтвердить что ты не робот

"pagehow" не принимается при нажатии "назад" на Safari на * IPad "

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

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

Когда я перехожу от страницы (нажав ссылку) и вернусь на страницу (нажав кнопку "назад" ), alert() не вызывается (IPad 2, iOS 5.1).

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

PS: интересно, что при просмотре страницы со страницы отображается правильная страница.

4b9b3361

Ответ 1

Вы можете проверить свойство 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");
    }
};

Ответ 2

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

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

Вот несколько ссылок на вопрос:

ИЗМЕНИТЬ

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

  • history.navigationMode = 'compatible';
  • <body onunload=""><!-- This does the trick -->
  • "Firefox 1.5+ и некоторая следующая версия Safari (которая содержит исправление для ошибки 28758) поддерживает специальные события, называемые pageshow и pagehide."
  • Использование jQuery $(document).ready(handler)
  • window.onunload = function(){};

Ответ 3

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

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