防止Chrome(及其他)浏览器记住页面加载时的滚动位置

时间:2018-10-20 17:11:32

标签: jquery google-chrome browser scroll

我在这里拔头发。 Chrome浏览器有一个令人讨厌的习惯,当您加载以前查看的页面时,它会记住页面滚动位置。对于我的Web应用程序来说,这是非常不希望的,但是无论如何,我都无法阻止Chrome这样做。我的测试环境是在装有Chrome的Linux Ubuntu虚拟机上。我开发了一种hack,它在页面加载后等待大约600毫秒,然后手动将滚动位置设置到页面顶部,但这使页面加载时间似乎比必须的要长600毫秒。这是我可行的技巧

// 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记住的滚动位置没有影响。

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

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

1 个答案:

答案 0 :(得分:0)

Argh

对不起,尽管我声称我没有设置页面,但是它被深埋在一些旧代码中,并且实际上是在我正在使用的某些外部库中完成的,因此很难检测到,但是在听我自己的问题是,它似乎还被其他人记住了,这让我看上去更加难过,是的,的确是手动将其设置为一个位置。

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

$(html,body).scrollTop(0)

在文档加载中有效。它确实需要一个非常短的超时,例如20ms。如果您也想记住该页面,也可以将离开页面时的滚动位置设置为0。感谢所有考虑我的问题的人