Обновление
Насколько я могу судить, об этой ошибке впервые сообщил Бен Черри .
Вот соответствующий отчет об ошибке и changeset из WebKit.
И вопрос из хрома .
Мне не удалось выяснить, когда ошибка была исправлена в Chrome. Если кто-то еще, я был бы очень признателен за информацию.
Я знаю, что ошибка существует в WebKit 533.21.1 (который используется в Safari 5.0.5) и была исправлена в 534.36 (Safari / WebKit nightly) - но я не знаю, и пока нет Я не смог выяснить, какая промежуточная сборка представила исправление.
Существует полезная диаграмма , которая отображает версию Chrome на версию WebKit.
Наиболее важно , эта ошибка возникает, когда любой активный сетевой трафик (загрузка изображений, запросы Ajax и т. Д.), А не только iframes. Если вы пытаетесь реализовать поддержку History API или используете последнюю версию плагина jQuery Address Asual (по умолчанию включена поддержка истории), эта ошибка может серьезно повлиять на ваше приложение.
2-е обновление
Кажется, я нашел точную версию WebKit, в которой было исправлено (534.10). Итак, если вы используете плагин jQuery и адрес Asual, вот практическое решение:
if (!($.browser.webkit === true && parseFloat($.browser.version) < 534.10)) {
// only enable state support if WebKit version >= 534.10
$.address.state("/base/path");
}
Надеюсь, это кому-нибудь поможет!
Я только что протестировал скрипку в последней версии WebKit (r86671), и состояние остается синхронизированным, поэтому это должно быть ошибкой. Забавно, что тратить много времени на написание вопроса и его отправку сразу же вдохновляет ответ.
Тем не менее, если у кого-то есть обходной путь, он будет очень признателен.
WebKit nightly (r86671):
[1305666598481] /
[1305666598481] vs
[1305666598480] /
---------------
[1305666597469] iframe loaded
---------------
[1305666597300] popstate: /
[1305666597298] $.address change: /
[1305666597270] (did popstate or $.address change trigger?)
[1305666597269] called history.back()
[1305666597269] appended iframe
---------------
[1305666596605] popstate: /node
[1305666596605] $.address change: /node
---------------
[1305666596008] popstate: /
[1305666596008] $.address change: /
---------------
[1305666595555] $.address change: /node
---------------
[1305666595142] $.address change: /
---------------
[1305666578600] iframe loaded
---------------
[1305666578400] $.address change: /_display/
[1305666578400] $.address init
---------------
[1305666577964] popstate: /_display/
Также интересно, что Safari теперь соответствует поведению Chrome и FireFox, запуская popstate при загрузке страницы.