【问题标题】:Prevent Chrome (and other) Browsers Rememeber Scroll Position on Page Load防止 Chrome(和其他)浏览器记住页面加载时的滚动位置
【发布时间】:2019-03-25 06:38:52
【问题描述】:

我在这里拉头发。 Chrome 有一个烦人的习惯,即当您加载以前查看过的页面时会记住页面滚动位置。这对我的 webapp 来说是非常不受欢迎的,但无论我尝试什么,我都无法阻止 Chrome 这样做。我的测试环境是在带有 Chrome 的 Linux Ubuntu 虚拟机上。我开发了一种 hack,它在页面加载后等待大约 600 毫秒,然后手动将滚动位置设置到页面顶部,但这使得页面加载时间看起来比它们长 600 毫秒,这很糟糕。这是我的 hack 有效

// hide the whole document, then show it after delay
$('#iContainer').addClass('cDispHide')
setTimeout(function(){
    window.scrollTo(0, 0);
    $('#iContainer').removeClass('cDispHide');
}, 600 );

在网上做了一些研究之后,我尝试了一切

  1. 我在包含 jQuery 之前把它放在脚本标签中

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

在 chrome 上,它应该禁用此滚动内存行为,但它没有,没有任何影响。可能是我放错地方了?

  1. 将此放入卸载:

    window.addEventListener('unload', function(e){
        document.body.style.display = 'none';
    });
    

应该禁用此行为,但它没有。我已将此代码放在 jquery $(window).load() 函数中,但没有任何效果。我也试过在卸载时设置 window.scrollTo(0, 0) 也没有效果

  1. 我试过了

    document.location = "#";
    

在 $(window).load() 和 $(document).ready() 里面应该告诉浏览器在页面顶部加载,但它没有效果,尽管在我的地址中放置了“#”酒吧

  1. 我已经尝试手动设置 window.scrollTo(0, 0),然后再执行任何导致我离开当前页面的 ajax,这对返回页面仍然没有影响。基本上页面滚动到页面顶部,ajax,离开页面,当我返回页面时,我被发送到页面中间作为我记住的滚动位置!?!?!?这有什么意义。就像我的设置 window.scrollTo() 对 Chrome 记住的滚动位置没有影响。

我什至注意到,如果我用鼠标滚动到页面顶部,然后离开页面,然后返回它,它会出于某种原因将我带到页面中间的某个点。它不记得我的滚动到顶部,就像它记得很久以前的某个滚动位置。我的代码中没有任何东西可以让它这样做。

对此的任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: jquery google-chrome browser scroll


    【解决方案1】:

    好的,抱歉,尽管我声称我没有设置页面,但它被深埋在一些旧代码中,实际上是在我正在使用的某个外部库中完成的,所以很难检测到,但在听我自己的问题是它似乎被其他东西记住了,这让我看起来更加努力,是的,它确实被手动设置到了一个位置。

    一旦我解决了这个问题,只需添加

    $(html,body).scrollTop(0)

    在文件加载工作。它确实需要一个非常短暂的超时,例如 20 毫秒。如果您还希望记住它,您也可以将离开页面时的滚动位置设置为 0。感谢所有考虑过我的Q的人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-21
      • 2012-09-26
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多