IE9 не обновляет window.location.href в iFrame при использовании кнопки возврата браузера. Обходные пути?

Я использую событие 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.


person jonemo    schedule 30.12.2011    source источник


Ответы (1)


window.location.href обновления меня устраивают. Если вы получаете доступ извне iframe, вы уверены, что получаете доступ к iframe.contentWindow.location.href?

person Niet the Dark Absol    schedule 30.12.2011
comment
В таком случае, может быть, вы скажете мне, что вы делаете иначе, чем я. Я создал игрушечный пример, чтобы проиллюстрировать здесь проблему: jonemo.de/stuff/ie9iframe/test.html - person jonemo; 31.12.2011
comment
Кажется, у меня отлично работает. Текущее состояние обновляется мгновенно, и location.href догоняет его в следующую секунду. - person Niet the Dark Absol; 31.12.2011
comment
Даже для использования кнопки возврата в браузере? Я сейчас в замешательстве. Я тестировал это на трех компьютерах, и ни на одном из них он не работает. Какая у вас версия IE9 (я использую 9.0.8112.16421), какая версия Windows (я пробовал 32-битную и 64-битную Windows7)? Должна быть разница! Я также нашел обсуждение на github.com/cowboy/jquery-hashchange/issues/17, что подтверждает наблюдаемое мной поведение. - person jonemo; 31.12.2011
comment
Ой, подожди, моя беда. Кнопка "Назад" действительно не работает ... Я могу только предположить, что это сбой в том, как кнопка "Назад" работает при работе с iframe - это всегда было немного ненадежно, и вы можете представить, какой беспорядок это должен быть, когда есть несколько iframe ... - person Niet the Dark Absol; 31.12.2011