Почему Google Chrome запускает событие onload при изменении фрагмента? - PullRequest
0 голосов
/ 24 октября 2011

Это сводит меня с ума, это HTML-код.

<html>
    <head>
        <script>
        function init() {
            console.log("fire once");
            window.onhashchange = function() {
                console.log(location.hash);
            }
        }
        </script>
    </head>
    <body onload="init();">
        <a href="#t1">T1</a>
        <a href="#t2">T2</a>
    </body>
</html>

Шаги для воспроизведения ошибки (ошибка, я считаю), откройте консоль, нажмите T1, нажмите T2, нажмите назад, нажмите назад ...в Firefox это вывод консоли (у меня есть действие добавления мыши внутри []).

[load]
fire once
[click T1]
#t1
[click T2]
#t2
[click back]
#t1
[click back]
(an empty string)

В Google Chrome 14.0.835.202 (протестировано в Ubuntu и Windows XP) это вывод.

[load]
fire once
[click T1]
#t1
[click T2]
#t2
[click back]
fire once
#t1
#t2
#t1
[click back]
fire once
#t1
#t2
#t1
(an empty line)

Safari не воспроизводит эту ошибку, так что, возможно, это ошибка V8?как, черт возьми, Google Chrome пережил два года с этой ошибкой?и самое главное, как мне предотвратить это?

Спасибо всем.

1 Ответ

1 голос
/ 05 ноября 2011

Событие onload больше не запускается. Вы видите выход со времени, когда вы нажали T1 и T2. Chrome не обновляет консоль при переходе по той же странице с помощью ссылки # или кнопки возврата.

РЕДАКТИРОВАТЬ: Хорошо, я мог неправильно понять, что вы имели в виду []. Если вывод final , который вы получаете в консоли, равен

fire once
#t1
#t2
fire once
#t1
#t2
#t1
fire once
#t1
#t2
#t1
<empty>

тогда это, кажется, было исправлено в последней версии Dev 17, которую я проверял (хотя она также отлично работает на древнем Chromium 12, который я лежал без дела). Я не проверял стабильный Chrome 15.

Если вместо этого вы имеете в виду, что конечный вывод в консоли - это только последние пять строк этого, то причина в том, что я дал в своем ответе.

...