18

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

4

6 回答 6

41

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

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

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

于 2016-07-06T17:01:01.527 回答
3

你有没有试过在文件准备好后触发这个?

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

如果这不起作用...

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

这会将它推到调用堆栈的底部

于 2013-09-04T15:19:22.297 回答
2

不仅适用于 chrome,而且我认为这会很好用。

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

更新您的问题后:

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

于 2013-09-04T15:05:37.763 回答
0

而不是希望 setTimout 最终出现在堆栈的底部 - 我宁愿强制它达到我们想要的滚动位置。我仍然认为这是一个 hack,我希望我们绑定到某种浏览器事件。

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

function checkPos() {
    if ($(window).scrollTop() == scrollToYPos) {
        clearInterval(interval);
    } else {
        window.scrollTo( 0, scrollToYPos );
        checkPos();               
    }
}      
于 2013-09-04T15:28:59.420 回答
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);
      });
于 2014-02-20T01:15:36.380 回答
-3

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

window.location = window.location

我在其中测试过的所有浏览器都可以始终如一地工作。我个人会远离 onload 回调,因为它们可能会导致加载过程中的跳跃在视觉上不太吸引人。

于 2015-07-07T18:42:57.380 回答