window.history.back() презарежда страницата в Internet Explorer, когато е вътре във вградена рамка?

Забелязвам странно поведение с Internet Explorer, когато страницата ми е във вградена рамка. Изглежда, че iframe се презарежда при извикване на window.history.back(), въпреки че трябва да се променя само хешът в URL адреса. Когато страницата не е във вградена рамка, тя се държи правилно и не презарежда страницата. Някаква идея защо се случва това и как да го предотвратим?

Създадох цигулка, която ще демонстрира това в 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 са последователни, независимо дали са във вградена рамка или не.

Някаква идея как да се предотврати това презареждане?


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 се държи правилно. Имам нужда от решение за предотвратяване на зареждането на страница при връщане „назад“ във вградена рамка. - person Johnny Oshika; 19.06.2012
comment
О, моя грешка, съжалявам. Използвам IE10 и там работи. В IE9 се държи както описахте. Първоначално мислех, че проблемът е другаде. Изглежда, че това е грешка в IE9 и по-стари версии. - person Václav Dajbych; 20.06.2012
comment
Здравей Вацлав, не мога да отбележа това като отговор, но ще получиш наградата за опит. Благодаря ти за това. Ще заключа, че няма решение за това. - person Johnny Oshika; 21.06.2012