【发布时间】: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 );
在网上做了一些研究之后,我尝试了一切
-
我在包含 jQuery 之前把它放在脚本标签中
if ('scrollRestoration' in history) { history.scrollRestoration = 'manual'; }
在 chrome 上,它应该禁用此滚动内存行为,但它没有,没有任何影响。可能是我放错地方了?
-
将此放入卸载:
window.addEventListener('unload', function(e){ document.body.style.display = 'none'; });
应该禁用此行为,但它没有。我已将此代码放在 jquery $(window).load() 函数中,但没有任何效果。我也试过在卸载时设置 window.scrollTo(0, 0) 也没有效果
-
我试过了
document.location = "#";
在 $(window).load() 和 $(document).ready() 里面应该告诉浏览器在页面顶部加载,但它没有效果,尽管在我的地址中放置了“#”酒吧
- 我已经尝试手动设置 window.scrollTo(0, 0),然后再执行任何导致我离开当前页面的 ajax,这对返回页面仍然没有影响。基本上页面滚动到页面顶部,ajax,离开页面,当我返回页面时,我被发送到页面中间作为我记住的滚动位置!?!?!?这有什么意义。就像我的设置 window.scrollTo() 对 Chrome 记住的滚动位置没有影响。
我什至注意到,如果我用鼠标滚动到页面顶部,然后离开页面,然后返回它,它会出于某种原因将我带到页面中间的某个点。它不记得我的滚动到顶部,就像它记得很久以前的某个滚动位置。我的代码中没有任何东西可以让它这样做。
对此的任何帮助将不胜感激。谢谢
【问题讨论】:
标签: jquery google-chrome browser scroll