Недавно я наткнулся на странное поведение в Chrome на OSX.При загрузке определенной страницы я помещаю новую страницу в историю окон, чтобы, если пользователь нажимает кнопку «Назад», загружается новая страница, а не страница, с которой они только что пришли.
Я использую replaceState
и pushState
для изменения истории и установки обработчика onpopstate
для загрузки новой страницы при нажатии кнопки «Назад».
В Chrome, однако, это не работает, за исключением , если пользователь нажимает в любом месте страницы (или нажимает любую клавишу) перед нажатием кнопки назад.
Кажется, я не могу продемонстрировать это на скрипке, но если вы настроите следующее, выдолжно быть в состоянии воспроизвести поведение
page1.html
<html>
<body>
<h1>This is page 1</h1>
<a href="page3.html">Go to page 3</a>
</body>
</html>
page2.html
<html>
<body>
<h1>This is page 2</h1>
<p>Well, how did you get here?</p>
</body>
</html>
page3.html
<html>
<body>
<h1>This is page 3</h1>
<p>Why don't you go back to page 1?</p>
<script>
history.replaceState(null, '', 'page2.html');
history.pushState(null, '', 'page3.html');
window.onpopstate = function(event) {
console.log("Reloading page in onpopstate handler");
window.location = document.location
}
console.log("Push page2.html to history");
</script>
</body>
</html>
Тогдазапустите простой веб-сервер в том же каталоге (например, python -m SimpleHTTPServer 8000
) и откройте localhost:8000/page1.html
в Chrome.
Я ожидаю, что вы сможете щелкнуть ссылку на страницу 3, а затем сразу же нажать кнопку "Назад".и в конечном итоге на странице 2. Но вы не делаете, вы в конечном итоге вернуться на страницу 1.
Однако, если вы нажмете ссылку на страницу 3, затем щелкните в любом месте страницы, а затем нажмите кнопку «Назад», вы окажетесь на странице 2, как и ожидалось.Нажатие любой клавиши перед нажатием кнопки «Назад» также работает.
В Firefox и Safari вы всегда окажетесь на странице 2, как и ожидалось.
Я использую OSX 10.14.5 и Chrome 75.0.3770,100.