我注意到Chrome会在302重定向后尝试保持滚动位置。
例如,给定一个这样的页面:
<html>
<body>
<p>Please wait...</p>
<script>setTimeout(function() { window.reload(true); }, 1000)</script>
</body>
</html>
如果在重新加载时,服务器将HTTP 302重定向返回到具有锚点的页面:
Location: /some-other-page.html#some-anchor
浏览器将正确向下滚动到锚点,但一旦页面加载,Chrome就会向上滚动到页面顶部。我相信这是因为它试图保持滚动位置(例如,使用后退/前进按钮时)。
注意:此仅似乎与HTTP重定向一起发生;将原始页面中的JavaScript更改为:
window.location.href = "/some-other-page.html#some-anchor"
按预期工作(Chrome滚动到锚点,然后停留在那里)。
这里发生了什么?有没有办法避免这种行为(即,我可以安全地使用带有重定向的锚点)?
(注意:我意识到页面重新加载到重定向有点奇怪,我已经能够解决我的应用程序的问题...但我想知道发生了什么,以避免这种情况未来的问题)