2012-06-14 4 views
6

Ich bemerke ein merkwürdiges Verhalten mit Internet Explorer, wenn meine Seite innerhalb eines iframe ist. Es scheint, dass der Iframe sich beim Aufruf von window.history.back() neu lädt, obwohl sich nur der Hash in der URL ändern sollte. Wenn sich die Seite nicht in einem Iframe befindet, verhält sie sich ordnungsgemäß und lädt die Seite nicht neu. Irgendeine Idee, warum das passiert und wie man es verhindert?window.history.back() lädt die Seite in Internet Explorer neu, wenn sie sich in einem Iframe befindet?

Ich habe eine Geige, die dies in IE9 demonstrieren:

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

jsfiddle verwendet einen Iframe, so wird das Verhalten der iframe Verhalten sein. Durch Klicken auf "#foo" und "#bar" wird der Hash in der URL geändert. Wenn Sie jetzt auf den Link "BACK" klicken, wird window.history.back() ausgelöst. Beachten Sie, dass sich der Zeitstempel ändert, wenn Sie dies tun, um anzuzeigen, dass die Seite neu geladen wird.

Alternativ, wenn Sie die iframe laden direkt:

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

Sie werden bemerken, dass der Zeitstempel ändert sich nicht, wenn Sie auf 'BACK'.

Dies ist nur ein IE-Problem, da Chrome und Firefox konsistent sind, ob innerhalb eines Iframes oder nicht.

Haben Sie eine Idee, wie Sie dieses Nachladen verhindern können?

+0

Wir sind sehr auch von diesem Fehler gestört :( – Blackbird

+0

@Blackbird, was die Problemumgehung ist, dass Sie dieses Problem zu lösen wählen? –

+0

keine, leider :(Was ist mit dir? – Blackbird

Antwort

2

Nun, wenn ich Zurück Befehl aus dem Kontextmenü wählen, tut es das gleiche. In IE10 können Sie HTML5 State Management verwenden. Ich habe Angst, in IE9 müssen Sie Hash-Geschichte verfolgen und als es so ändern:

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

bearbeiten

Und was ist das? Wenn Sie javascript:window.top.location.hash='bar' aufrufen, können Sie das Ereignis onhashchange im übergeordneten Fenster abfangen und dann in iframe scrollTo aufrufen. Aber das funktioniert nur in der gleichen Domäne.

+0

Vielen Dank Václav, aber ich beli Eve, die einen weiteren Status in den History-Stack einfügt, ist das korrekt? Während es funktioniert, bricht es die Back/Forward-Zustände. –

+0

Das stimmt. Ich werde versuchen, eine andere Lösung zu finden. –

+0

Ich bin ein wenig verwirrt, aber es sieht aus wie http://jsfiddle.net/peh96/5/ zeigt das Beispiel im Quirks-Modus, die Browser-Verlauf ignoriert # Links. Wenn ich http://fiddle.jshell.net/peh96/5/show/ öffne, funktioniert es wie erwartet. Natürlich muss die Zeit aktualisiert werden, wenn 'onhashchange' auftritt. Überprüfen Sie meinen Code: http://jsfiddle.net/ZGqHF/show/ –