2012-06-14 2 views
6

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

Любая идея, как предотвратить эту перезагрузку?

+0

Мы также очень беспокоит эта ошибка :( – Blackbird

+0

@Blackbird, что то обходной путь, который вы выбрали, чтобы решить эту проблему? –

+0

ни, к сожалению :(Что о вас? – Blackbird

ответ

2

Ну, когда я выбираю Назад команда из контекстного меню, она делает то же самое. В 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. Но это работает только в том же домене.

+0

Спасибо, Вацлав. Но я beli что добавляет другое состояние в стек истории, верно? Поэтому, пока он будет работать, он разбивает состояния назад/вперед. –

+0

Это правда. Я попытаюсь найти другое решение. –

+0

Я немного смущен, но похоже, что http://jsfiddle.net/peh96/5/ показывает пример в режиме quirks, который может вызвать историю браузера, игнорируя # ссылки. Когда я открываю http://fiddle.jshell.net/peh96/5/show/, он работает так, как ожидалось. Конечно, вы должны обновлять время, когда происходит «onhashchange». Проверьте мой код: http://jsfiddle.net/ZGqHF/show/ –