页面刷新后禁用浏览器的自动滚动?

时间:2013-09-04 15:03:05

标签: javascript google-chrome scroll

有没有办法禁用某些现代浏览器(Chrome和Safari)在页面刷新时记住滚动位置的行为?

6 个答案:

答案 0 :(得分:22)

对于支持history.scrollRestoration的浏览器,可以关闭自动滚动行为:

if ('scrollRestoration' in history) {
  history.scrollRestoration = 'manual';
}

来源:https://developers.google.com/web/updates/2015/09/history-api-scroll-restoration

答案 1 :(得分:3)

你准备好在文件准备好之后解雇这个吗?

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

如果不起作用......

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

将把它推到调用堆栈的底部

答案 2 :(得分:2)

不仅仅是针对铬,但对于所有人来说,我认为这样做会很好。

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

更新问题后:

如果我们使用一些cookie或会话存储,我认为会更好。

答案 3 :(得分:0)

而不是希望setTimout最终在堆栈的底部 - 我强调它,我们达到了我们想要的滚动位置。我仍然认为这是一个黑客,我希望我们绑定一些浏览器事件。

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

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

答案 4 :(得分:0)

我遇到了同样的问题。这是我提出的基本解决方案:

      // 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's a fresh user), otherwise
      // the browser is likely to resume the user's 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);
      });

答案 5 :(得分:-3)

我认为最简单的方法是欺骗浏览器重新加载它认为是新页面。

window.location = window.location

我在其中测试过的所有浏览器都能始终如一地运行。我个人会远离onload回调,因为它们可能会导致在负载过程中跳跃,而且视觉上并不具吸引力。