@oleg95

PushState в JS не активирует кнопку «назад» браузера. Что делать?

На сайте есть статьи и так устроено, что при докручивании скроллом до конца одной статьи, через аякс подгружаются новые. И я сделал через JS при помощи pushState, чтобы при этом на каждой новой статье менялся url на url текущей статьи и записывался в историю браузера. Но при пролистывании в браузере Хром часто выполняется смена юрл как надо, но при нажатии кнопки "назад" браузера не срабатывает событие popstate, а выкидывает на страницу, что была до начала прокручивания. Если открыть страницу в новом окне, то кнопка "назад" может просто не активироваться при смене url. При том бывает , что оно начинает работать как надо, но после перезагрузки опять не работает. То работает , то не работает по непонятной логике. И еще один момент. Если кликнуть мышкой в любом месте окна браузера , то начинает работать и то же самое при клике кнопки вниз или какой-то кнопки с символом на клавиатуре. Но через имитацию клика через $("body").trigger("click") при загрузке добиться такого же результата не получается. Подскажите пожалуйста , а чем может быть причина?
var currentArticle = null;
function articleHistoryOnScroll(){
  var articles = document.querySelectorAll("article.article-content");
    var articlesLength = articles.length; 
    for(var i=articlesLength-1; i>=0; --i){
      if(articles[i].getBoundingClientRect().top<40){
           if(currentArticle != i){
           currentArticle = i;
           var title = articles[i].getAttribute("data-title");
           var url = articles[i].getAttribute("data-url");
           window.history.pushState({url:url},title,url);
           document.title = title;
         } 
         break;
      }
    }  
}
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Что-то связано с фокусом и событием прокрутки.
Профилируйте и исправляйте.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SummerWeb Ярославль
от 120 000 до 180 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
03 июн. 2024, в 19:38
5000 руб./за проект
03 июн. 2024, в 19:22
10000 руб./за проект
03 июн. 2024, в 18:59
10000 руб./за проект