Обработчик onpopstate не запускается в Chrome, если только нажатие кнопки мыши не произошло до нажатия кнопки назад - PullRequest
0 голосов
/ 05 июля 2019

Недавно я наткнулся на странное поведение в 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.

...