Событие для просмотра страниц в Safari
У меня есть следующий простой JavaScript, который мне требуется для повторной инициализации некоторых переменных при перезагрузке страницы, особенно когда страница обслуживается из Safari BFCache:
jQuery(window).bind('pageshow', function(event) {
// I could inspect event.originalEvent.persisted here to check for BFCache hits,
// but it isn't required in this instance.
// Do some initialisation here
});
Допустим, пользователь следует по указанному ниже пути, переходя к страницам B и C, просматривая назад (т. Е. Используя кнопку назад) до страницы A после каждой:
A -> B -> A -> C -> A
pageshow
Обработчик запускается только при первом и втором посещениях A, т.е. при начальной загрузке страницы и первой загрузке BFCache. Так что, по сути, кажется, что страницы обслуживаются из огня BFCache pageshow
один раз и только один раз.
Это ожидаемое поведение в Safari, и есть ли способ обойти это?
2 ответа
Я решил решить проблему, связавшись с popstate
событие:
jQuery(window).bind('popstate', function(event) {
// Do some initialisation here
});
который срабатывает при изменении активной записи истории. Похоже, что это срабатывает последовательно, а не один раз, поэтому достигается цель выполнения повторной инициализации всякий раз, когда пользователь попадает на страницу, независимо от механизма ее получения.
Чтобы отключить BFCache
Вы можете добавить onunload=""
атрибут вашего HTML-тела.
<body onunload=""></body>