Chrome 79 не отражает состояние DOM в onpageshow после обратной навигации
Я считаю, что это проблема, связанная с bfcache (обратный кэш) в Chrome 79, так как это не было проблемой в Chrome 78. Приведенный ниже код демонстрирует проблему при использовании последней версии Chrome в Windows 10.
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Test Page</h1>
<select id="example" multiple>
<option>Black</option>
<option>Cyan</option>
<option>Magenta</option>
<option>Yellow</option>
</select>
<a href="https://www.google.com/">Google</a>
<script type="text/javascript">
window.onpageshow = function () {
//setTimeout(function () {
console.log(document.querySelectorAll('#example option:checked').length);
//}, 100);
};
</script>
</body>
</html>
Выберите элементы в раскрывающемся списке, а затем перейдите со страницы, используя гиперссылку, и при возвращении на страницу, нажав кнопку возврата в браузере, ранее выбранные элементы не отражаются в событии pageshow, а находятся на веб-странице.
Единственный способ обойти это - установить короткий тайм-аут (см. Закомментированный код). В любом случае, я надеюсь, что кто-то, читающий это, сможет воспроизвести в Chrome 79, и если да, предложите лучший способ решения проблемы.
1 ответ
Это было регрессом, вызванным восстановлением состояния элемента управления формой после завершения синтаксического анализа документа, которое теперь исправлено в Chrome 80. См. Проблему 1035662: Chrome 79 не отражает состояние DOM в onpageshow после обратной навигации.