Ответ 1
Это вызвано back-forward cache. Предполагается сохранить полное состояние страницы, когда пользователь перемещается. Когда пользователь перемещается назад с помощью кнопки "Назад", вы можете быстро загрузиться из кеша. Это отличается от обычного кеша, который кэширует только HTML-код.
При загрузке страницы для bfcache onload
событие не будет запущено. Вместо этого вы можете проверить свойство persisted
события onpageshow
. Он установлен на значение false при начальной загрузке страницы. Когда страница загружается из bfcache, она имеет значение true.
window.onpageshow = function(event) {
if (event.persisted) {
alert("From back / forward cache.");
}
};
По какой-то причине jQuery не имеет этого свойства в событии. Однако вы можете найти его на оригинальном мероприятии.
$(window).bind("pageshow", function(event) {
if (event.originalEvent.persisted) {
alert("From back / forward cache.");
}
});
Быстрое решение этой проблемы - перезагрузка страницы при нажатии кнопки "Назад". Это, однако, сводит на нет любой положительный эффект, который даст задний/передний кеш.
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload()
}
};
В качестве побочного элемента вы можете увидеть множество страниц, предлагающих использовать пустой обработчик onunload
в качестве решения. Это не сработало с iOS5.
$(window).bind("unload", function() { });