window.history.back () перезагружает страницу в Internet Explorer внутри iframe?

Я замечаю странное поведение Internet Explorer, когда моя страница находится внутри iframe. Кажется, что iframe перезагружается при вызове window.history.back (), хотя должен изменяться только хеш в URL-адресе. Когда страница не находится внутри iframe, она работает правильно и не перезагружает страницу. Есть идеи, почему это происходит и как это предотвратить?

Я создал скрипку, которая продемонстрирует это в IE9:

http://jsfiddle.net/peh96/5/

jsfiddle использует iframe, поэтому поведение будет таким же, как iframe. Нажатие "#foo" и "#bar" изменит хеш в URL-адресе. Теперь нажатие на ссылку «НАЗАД» запустит window.history.back (). Обратите внимание, что метка времени изменяется, когда вы это делаете, указывая на то, что страница перезагружается.

В качестве альтернативы, если вы загружаете iframe напрямую:

http://fiddle.jshell.net/peh96/5/show/

вы заметите, что отметка времени не меняется при нажатии «НАЗАД».

Это проблема только IE, поскольку Chrome и Firefox согласованы независимо от того, находятся ли они внутри iframe или нет.

Есть идеи, как предотвратить эту перезагрузку?


person Johnny Oshika    schedule 14.06.2012    source источник
comment
Нас тоже очень беспокоит этот баг :(   -  person Blackbird    schedule 26.07.2012
comment
@Blackbird, какой обходной путь вы выбрали для решения этой проблемы?   -  person Johnny Oshika    schedule 31.07.2012
comment
нет, к сожалению :( А ты?   -  person Blackbird    schedule 31.07.2012
comment
Пока ничего. Я подумываю создать свой собственный стек истории и использовать его вместо window.history.back (). Это немного некрасиво, но я не знаю, как это сделать для IE.   -  person Johnny Oshika    schedule 01.08.2012
comment
У меня такая же проблема, похоже, с IE ›8   -  person wosis    schedule 28.08.2012
comment
@JohnnyO Вы нашли какое-нибудь решение этой проблемы с перезагрузкой в ​​IE ?? ответьте, пожалуйста, на то, что вы в конце концов использовали, чтобы этого избежать.   -  person Siddharth Pandey    schedule 05.03.2014
comment
@Yoda, я так и не нашел решения этой проблемы в IE9, но это больше не работает в IE 11. Я не уверен насчет IE 10.   -  person Johnny Oshika    schedule 07.03.2014
comment
@JohnnyO приветствует ответ.   -  person Siddharth Pandey    schedule 07.03.2014


Ответы (1)


Что ж, когда я выбираю команду Назад из контекстного меню, она делает то же самое. В IE10 вы можете использовать HTML5 State Management. Боюсь, что в IE9 вы должны отслеживать историю хеширования, а затем изменять ее следующим образом:

document.getElementById('back').addEventListener('click', function () {
    window.location.hash = 'abc';
}, false);

Изменить

А что насчет этого? Когда вы вызываете javascript:window.top.location.hash='bar', вы можете поймать событие onhashchange в родительском окне, а затем вызвать scrollTo в iframe. Но это работает только в том же домене.

person Václav Dajbych    schedule 17.06.2012
comment
Спасибо, Вацлав. Но я считаю, что это добавляет еще одно состояние в стек истории, правильно? Таким образом, пока он будет работать, он нарушает состояния назад / вперед. - person Johnny Oshika; 18.06.2012
comment
Это правда. Я попробую придумать другое решение. - person Václav Dajbych; 18.06.2012
comment
Я немного запутался, но похоже, что jsfiddle.net/peh96/5 показывает пример в режиме причуд, который может привести к тому, что история браузера игнорирует # ссылки. Когда я открываю fiddle.jshell.net/peh96/5/show, он работает как и ожидалось. Конечно, вам нужно обновлять время, когда происходит onhashchange. Проверьте мой код: jsfiddle.net/ZGqHF/show - person Václav Dajbych; 18.06.2012
comment
Привет, Вацлав, возможно, ты неправильно прочитал мой вопрос. Проблема возникает внутри iframe. Как только вы выводите свое окно за пределы iframe (что вы и делаете), IE начинает себя правильно. Мне нужно решение, чтобы предотвратить загрузку страницы при возврате в iframe. - person Johnny Oshika; 19.06.2012
comment
О, моя вина, извини. Я использую IE10, и он там работает. В IE9 он ведет себя так, как вы описали. Я изначально думал, что проблема в другом. Похоже, это ошибка в IE9 и старше. - person Václav Dajbych; 20.06.2012
comment
Привет, Вацлав, я не могу отметить это как ответ, но ты получаешь награду за попытку. Спасибо за это. Я собираюсь сделать вывод, что для этого нет решения. - person Johnny Oshika; 21.06.2012