2012-06-14 13 views
6

Zauważam dziwne zachowanie w Internet Explorerze, gdy moja strona znajduje się wewnątrz elementu iframe. Wygląda na to, że element iframe ładuje się ponownie podczas wywoływania metody window.history.back(), mimo że zmienia się tylko wartość mieszania w adresie URL. Jeśli strona nie znajduje się wewnątrz elementu iframe, zachowuje się poprawnie i nie ładuje ponownie strony. Każdy pomysł, dlaczego tak się dzieje i jak temu zapobiec?window.history.back() ponownie ładuje stronę w Internet Explorerze, gdy znajduje się wewnątrz elementu iframe?

I stworzył skrzypce, który zademonstruje to w IE9:

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

jsfiddle używa iframe, więc zachowanie będzie zachowanie iframe. Kliknięcie przycisku "#foo" i "#bar" spowoduje zmianę wartości mieszania w adresie URL. Kliknięcie linku "WSTECZ" spowoduje wyzwolenie window.history.back(). Zauważ, że znacznik czasu zmienia się, gdy to robisz, wskazując, że strona przeładowuje się.

Ewentualnie, jeśli załadować iframe bezpośrednio:

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

zauważysz, że znacznik czasu nie zmienia się, gdy przycisk „Z powrotem”.

Jest to tylko problem związany z IE, ponieważ Chrome i Firefox są spójne zarówno wewnątrz elementu iframe, jak i poza nim.

Każdy pomysł, jak zapobiec ponownemu załadowaniu?

+0

Jesteśmy również bardzo przeszkadza ten błąd :( – Blackbird

+0

@Blackbird, jaka jest obejście, które wybrał, aby rozwiązać ten problem? –

+0

żaden niestety :(A co ty? Nic jeszcze – Blackbird

Odpowiedz

2

Po wybraniu polecenia Wstecz z menu kontekstowego, robi to samo. W IE10 możesz użyć HTML5 State Management. Obawiam się, że w IE9 trzeba śledzić historię niż hash i zmienić go tak:

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

Edycja

i co na ten temat? Po wywołaniu javascript:window.top.location.hash='bar' można przechwycić zdarzenie onhashchange w oknie nadrzędnym, a następnie wywołać scrollTo w elemencie iframe. Ale działa to tylko w tej samej domenie.

+0

Dziękuję Václav. Ale ja beli Ewa, która dodaje inny stan do stosu historii, czy to prawda? Tak więc, chociaż będzie działać, łamie on stany do tyłu/do przodu. –

+0

To prawda. Spróbuję znaleźć inne rozwiązanie. –

+0

Jestem trochę zmieszany, ale wygląda na to, że http://jsfiddle.net/peh96/5/ pokazuje przykład w trybie dziwactwa, który może spowodować, że historia przeglądarki zignoruje # linki. Kiedy otwieram http://fiddle.jshell.net/peh96/5/show/, działa zgodnie z oczekiwaniami. Oczywiście musisz zaktualizować czas, kiedy pojawi się 'onhashchange'. Sprawdź mój kod: http://jsfiddle.net/ZGqHF/show/ –

Powiązane problemy