Событие для просмотра страниц в 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>
Другие вопросы по тегам