Отключить автоматическую прокрутку броузера после обновления страницы?

Есть ли способ отключить поведение, когда некоторые современные браузеры (Chrome и Safari) запоминают вашу позицию прокрутки на странице обновления?

Ответ 2

Вы пытались запустить это после того, как документ готов?

$(document).ready(function(){
    window.scrollTo(0, 0);
});

если это не работает...

$(document).ready(function(){
    setTimeout(function(){
        window.scrollTo(0, 0);
    }, 1);
});

Что будет делать это внизу стека вызовов

Ответ 3

не только для хрома, но для всех, я думаю, это будет хорошо работать.

window.onload = function () {
    window.scrollTo(0, 0);
};

После обновления вашего вопроса:

Я думаю, что это лучше, если мы используем некоторые файлы cookie или хранилища сеансов.

Ответ 4

Вместо того, чтобы надеяться, что setTimout заканчивается в нижней части стека, я скорее применяю его, чтобы мы попали в нужную позицию прокрутки. Я все еще считаю это хаком, я надеялся на какое-то событие браузера, с которым мы связываемся.

var scrollToYPos = 100;
var interval = setInterval(checkPos, 0);

function checkPos() {
    if ($(window).scrollTop() == scrollToYPos) {
        clearInterval(interval);
    } else {
        window.scrollTo( 0, scrollToYPos );
        checkPos();               
    }
}      

Ответ 5

Я столкнулся с этой же проблемой. Вот основное решение, которое я придумал:

      // scroll the user to the comments section if we need to
      wt = win.scrollTop();
      wb = wt + win.height();
      // if scroll position is 0, do this (it a fresh user), otherwise
      // the browser is likely to resume the user scroll position, in 
      // which case we don't want to do this
      yab.loaded().done(function() {
        // it seems that browsers (consistently) set the scroll position after
        // page load.  Accordingly wait a 1/4 second (I haven't tested this to the lowest
        // possible timeout) before triggering our logic
        setTimeout(function() {
          // if the window top is 0, scroll the user, otherwise the browser restored
          // the users scroll position (I realize this fails if the users scroll position was 0)
          if(wt === 0) {
            p = self.container.offset().top;
            if(wb != p) {
              win.scrollTop(p - th - 20);         
            }
          }              
        }, 250);
      });

Ответ 6

Я думаю, что самым простым способом было бы превратить браузер в перезагрузку, которая, по его мнению, является новой страницей.

window.location = window.location

Все браузеры, которые я тестировал в этом, работают последовательно. Я лично остался бы в стороне от обратных вызовов onload, поскольку они могут вызывать переходы во время загрузки, которые не слишком визуально привлекательны.