2009-06-05 2 views
2

Ich habe eine Website mit Anker Navigation (wie Gmail, wenn der Anker Wert ändert einen neuen Inhalt für eine Seite mit Ajax geladen wird). In Firefox, wenn ich den Anker (mit js oder mit einer Seite) ändere, wird ein neues Element in der Geschichte erstellt und funktioniert perfekt. Aber in IE6 speichert es dieses neue Element nicht und die Zurück-Schaltfläche funktioniert nicht wie erwartet.Speichern Sie den Anker in der ie6 Geschichte

Gibt es trotzdem, diesen neuen Artikel mit Javascript hinzuzufügen? Dies ist möglich, weil Google Mail es tut, aber ich weiß nicht, wie es das tut.

Antwort

9

Ich habe eine Los der Arbeit mit der Geschichte und mit dem Hash. Fast alle vorhandenen Historien-Plugins haben eine Art Lücke in ihnen. Die, die ich verwendet habe, die ziemlich nah an der Perfektion ist, ist dies eine, die ein jQuery-Plugin ist:

http://www.mikage.to/jquery/jquery.history.js

im März dieses Jahres wurde aktualisiert behandelt IE 8 Fragen und befasst sich auch ziemlich erfolgreich mit IE6. Eine Sache, die ich bemerkt habe ist, dass IE wirklich hasst? im Hash nach dem #. Es hört auf, den Hash korrekt zu behandeln, wenn der? ist anwesend. Selbst dieses hier, denke ich, braucht einen kleinen Patch für die?, Ich muss das wirklich nach Mikage schicken. Die Art und Weise zu handhaben ist statt location.hash im Plugin zu verwenden, wenn der Hash-Referenzierung, verwenden Sie diese Funktion:

function getHash(loc) { 
    loc = loc.toString(); 
    if (loc.indexOf("#") != -1) 
     return loc.substring(loc.indexOf("#")); 
     else return ""; 
} 

So in den Stellen, wo Sie den Hash benötigen, übergeben location um die Funktion ...

getHash(location) 

... anstelle von location.href. Beachten Sie jedoch, dass Sie für den IE den iframe verwenden möchten und stattdessen iframe.location verwenden möchten.

getHash(iframe.location) 

Yahoos Bug

Sie können sehen, dass Yahoo nicht behandelt graziös 's in IE, wenn unter dieser URL suchen:

http://developer.yahoo.com/yui/examples/history/history-tabview.html#tabview=tab1?7236471234

Es sollte das einfach ignorieren nicht existierendes Modul, (was es für andere Namen tut, die keine haben?). Aber es wirft einen JavaScript-Fehler auf, wenn ein? ist in der URL.

(Ich werde diese Liste in einem Moment verlängern)

Wirklich einfach Geschichte

Ehrlich gesagt, es scheint primäres Problem ist ruhend es zu sein gegangen. Ich habe this issue erlebt und wollte einfach nicht durchlöchern:

Auch, obwohl keine Änderungen auf der Seite stattfinden angezeigt, während ich rückwärts durch die Geschichte reisen, die zurück Funktionalität zurück, sobald ich die Seiten, die ich zuvor navigiert hatte, schlug vor dem RSH. Also, wenn ich auf vier Links in der RSH-Seite geklickt hat, zurück Funktionalität wird nach zurückgeben Ich habe auf die Zurück-Taste vier mal geklickt. Ich hoffe das ergibt Sinn.

+0

+1 für die Lücken, aber noch wichtiger für die? nach #, das könnte leicht der Mörder sein – annakata

+0

Ich hatte noch nie von der '#? Problem vorher. Gut zu wissen. –

+0

Das lustige ist, ich habe meine History-Funktion so modelliert, dass sie genau wie eine URL funktioniert und ich dachte, ich wäre sehr clever. Nachdem ich herumgelaufen bin und mir die verschiedenen Implementierungen angeschaut habe und gesehen habe, ob ich es gut gemacht habe, bin ich auf Facebook gestoßen, wo eine ähnliche Idee verwendet wird, um die Geschichte zu verfolgen. Ehrlich gesagt, sollte ich dies zu einem ausgefeilteren Plugin machen, das komplett mit dem URL-Parser ist und es ereignisgesteuert macht. – cgp

0

Ich denke, dass Sie ein anderes Problem haben können. IE6 behandelt sicher # Links in der Geschichte, wie es für mich auf einer gegebenen Testseite sollte, so glaube ich, entweder Sie haben dies in irgendeiner Weise gebrochen oder Sie haben einen Fehler mit Ihrer speziellen Version von IE.

Ich schlage vor, Sie versuchen ein paar verschiedene Kopien und Versionen von IE6 auf anderen Maschinen, um Letzteres auszuschließen, und dann versuchen, Ihren Code zu vereinfachen und neu zu erstellen, um zu sehen, ob und wann das Problem auftritt. Das Ausschalten von JS kann (abhängig von html) eine schnelle Möglichkeit sein, dies zu testen.

Wenn alles andere fehlschlägt Ich schlage vor, Sie schauen auf Really Simple History die (letzte Mal habe ich geprüft) fast alle JS/Geschichte Probleme löst man es werfen kann.

Verwandte Themen