Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.05.2020, 23:08
Интересующийся
Отправить личное сообщение для sergeantpepper Посмотреть профиль Найти все сообщения от sergeantpepper
 
Регистрация: 03.04.2017
Сообщений: 15

Не срабатывает onload при нажатии на браузерную кнопку Назад
Доброго времени!

Решение проблемы затянулось, прошу помочь, у кого был такой опыт.
Суть проблемы:
Есть сайт с анимацией перехода между страницами. Анимация работает опираясь на событие $(window).on('load'), которое запускает функцию, "шторка" открывается, показывая контент страницы. Проблема заключается в том, что в некоторых мобильных браузерах есть (по всей видимости) кэширование предыдущей страницы и заморозка ее в том состоянии, в котором ее покидал пользователь, таким образом, при переходе по браузерной кнопке Назад, пользователь видит не открывающуюся шторку, события onload не происходит.

Пробовал использовать событие pageshow, событие unload, но проблема по-моему глубже, так как при переходе назад в android.browser 12.1.5 и в некоторых safari не вызывается вообще никакого события, яваскрипты не запускаются. Ощущение, что страница как бы консервируется и при возврате к ней по кнопке Назад, не происходит никакого события.

Чем побеждать?
Ответить с цитированием
  #2 (permalink)  
Старый 18.05.2020, 23:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,804

sergeantpepper,
может hashchange?
Ответить с цитированием
  #3 (permalink)  
Старый 18.05.2020, 23:56
Интересующийся
Отправить личное сообщение для sergeantpepper Посмотреть профиль Найти все сообщения от sergeantpepper
 
Регистрация: 03.04.2017
Сообщений: 15

Сообщение от рони Посмотреть сообщение
sergeantpepper,
может hashchange?
Рони, увы нет.
Пробовал так: <body onhashchange="alert('onhashchange');">
Ответить с цитированием
  #4 (permalink)  
Старый 19.05.2020, 00:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,804

sergeantpepper,
а так window.onhashchange ?
Ответить с цитированием
  #5 (permalink)  
Старый 19.05.2020, 00:28
Интересующийся
Отправить личное сообщение для sergeantpepper Посмотреть профиль Найти все сообщения от sergeantpepper
 
Регистрация: 03.04.2017
Сообщений: 15

Сообщение от рони Посмотреть сообщение
sergeantpepper,
а так window.onhashchange ?
Рони, тоже нет.
Вообще, ощущение что js никакой не срабатывает. Не знаю за что зацепиться (ну кроме какого-нибудь setInterval, но это уж совсем извращением кажется)
Ответить с цитированием
  #6 (permalink)  
Старый 19.05.2020, 07:33
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,548

sergeantpepper,
Именно load не работает? Проверял?
$(window).on('load', function() {
    return alert('window load');
    ...
});

Какая версия jQuery и смартфонов? Browser Support смотрел?

Последний раз редактировалось Rise, 19.05.2020 в 07:36.
Ответить с цитированием
  #7 (permalink)  
Старый 19.05.2020, 12:37
Интересующийся
Отправить личное сообщение для sergeantpepper Посмотреть профиль Найти все сообщения от sergeantpepper
 
Регистрация: 03.04.2017
Сообщений: 15

Сообщение от Rise Посмотреть сообщение
sergeantpepper,
Именно load не работает? Проверял?
$(window).on('load', function() {
    return alert('window load');
    ...
});

Какая версия jQuery и смартфонов? Browser Support смотрел?
Да, при переходе назад не работает.
Я так понимаю, что имею дело с back-forward cache
https://habr.com/ru/company/yandex/blog/496360/

Но проблема в том, что я не вижу реакции и на события pageshow
Ответить с цитированием
  #8 (permalink)  
Старый 19.05.2020, 12:54
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,548

sergeantpepper,
Так тоже не работает?
window.onload = function() {
    alert('window onload');
};
Ответить с цитированием
  #9 (permalink)  
Старый 19.05.2020, 14:19
Интересующийся
Отправить личное сообщение для sergeantpepper Посмотреть профиль Найти все сообщения от sergeantpepper
 
Регистрация: 03.04.2017
Сообщений: 15

Сообщение от Rise Посмотреть сообщение
sergeantpepper,
Так тоже не работает?
window.onload = function() {
    alert('window onload');
};
Тоже не работает. А в чем принципиальная разница?
Ответить с цитированием
  #10 (permalink)  
Старый 19.05.2020, 14:54
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 428

sergeantpepper,
Попробуйте History API: https://developer.mozilla.org/en-US/...ers/onpopstate

https://developer.mozilla.org/ru/doc...PI/History_API
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как пометить чекбокс при нажатии на кнопку? vasyakrn Элементы интерфейса 5 03.04.2015 12:10
При нажатии на кнопку блок двигается с помощью JavaScript LizaYa Общие вопросы Javascript 3 01.04.2015 14:21
При нажатии на кнопку появляется ненужный синий цвет Nailya Элементы интерфейса 2 26.05.2014 20:22
Восстановление hidden field при нажатии кнопки Назад в браузере debugx Элементы интерфейса 1 19.10.2011 18:03
вывод нужного текста в текстовом поле при нажатии на кнопку! fifo4ka Общие вопросы Javascript 7 06.05.2008 12:36