Я использую событие javascript onhashchange
, чтобы показать пользователю последовательность «экранов» без перезагрузки страницы для каждого экрана. При размещении этой страницы внутри iFrame событие hashchange не запускается IE9, и window.location.href не обновляется должным образом.
Что я ожидаю: всякий раз, когда пользователь нажимает "продолжить", чтобы перейти к другому экрану, хеш-часть URL-адреса изменяется. Когда используются кнопки браузера «Назад» и «Вперед», браузер изменяет хэш. Это перехватывается обработчиком события onhashchange в javascript, и отображается правильный контент.
Вместо этого я наблюдаю: поведение всех браузеров, поддерживающих событие onhashchange (включая IE9), соответствует ожиданиям. Однако, когда рассматриваемая страница загружается внутри iFrame, поведение в IE9 меняется. Вот что происходит, когда я нажимаю кнопку возврата браузера в IE9:
- Событие hashchange не запускается.
- window.location.href и window.location.hash остаются такими же, как и до нажатия кнопки "Назад"
- Если я щелкну правой кнопкой мыши iFrame и просматриваю свойства iFrame, URL-адрес отображается с измененным хешем. Т.е. URL в окне свойств не соответствует window.location.href
Пример игрушки: поскольку другие сообщают, что не наблюдают такого поведения, я создал здесь игрушечный пример: http://jonemo.de/stuff/ie9iframe/test.html. Щелкните state1
, затем щелкните state2
, нажмите кнопку возврата в браузере. Current state of iFrame
должен читать state1
, но в моем IE9 он читает state2
после этой последовательности действий. Мой IE - это версия 9.0.8112.16421, это обычная версия выпуска.
Как я могу обнаружить использование кнопки возврата на странице внутри iFrame в IE9? Страницы, содержащие iFrame и внутри iFrame, могут находиться в разных доменах. Я полностью контролирую страницу в iFrame и могу разместить произвольный Javascript на странице, содержащей iFrame.