IE7 und Verhalten bei Ändern von location.hash
Mr. Horse
- javascript
Hallo,
ich weiß nicht, ob ich gerade völlig auf dem Holzweg bin, aber ich stehe im Moment vor einer Wand (und prodziere schiefe Metaphern ...).
Ich habe eine Web-Seite mit exzessivem Einsatz von Javascript (inkl. jQuery), sehr umfangreichen und komplexen CSS-Styles und auch noch sehr umfangreichem und tief verschachteltem XHTML-Markup.
Auf dieser Seite nun gibt es lokale Links der Form <a href="#foo1">Foo 1</a> (die eigentlich als JS-betriebene Tab-Reiter fungieren sollen).
Im IE7 (nicht im IE6 und erst recht nicht in den anderen Browsern) dauert es nun unglaublich lange, bis nach dem Klick auf einen dieser Links die URL-Zeile des Browsers sich entsprechend ändert (der URL-Hash) - fast zwei Sekunden!
Mein erster Gedanke war natürlich, dass es an meinem JS für die Tabs liegt. Also habe ich dieses JS rausgeschmissen. Das Problem blieb. Ich habe anschließend zunächst das gesamte JS entfernt und schließlich sogar das gesamte XHTML-Markup bis auf die UL-Liste mit den fünf Links.
Lediglich die CSS-Styles behielt ich bei (weil ich schon einen Verdacht hatte). Und tatsächlich: das Verhalten des IE7 bliebt unverändert.
Dann nahm ich mir wieder die Ausgangsseite, behielt alles bei (das Javascript und das umfangreiche Markup) und entfernte nur die Styles (bzw. die Referenz darauf) - und siehe da: der IE7 reagierte plötzlich gar nicht mehr träge.
Nun stelle ich mir die Frage: was passiert eigentlich in den Innereien des IE7, wenn sich der URL-Hash ändert (und zwar egal, ob per JS oder konventionell per Klick auf einen lokalen Link)? Es wirkt fast so, als baute der IE7 den DOM-Baum jedesmal neu auf. Wenn ich gleichzeitig die "Webdeveloper"-Toolbar des IE geöffnet halte (ja, ich habe das Ganze auch ohne durchgespielt), sehe ich auch, dass sich der dort angezeigte DOM-Baum jedesmal neu aufbaut.
Kennt jemand von Euch dieses Phänomen? Wie erklärt sich das? Und kann man irgendwie sinnvoll darauf reagieren, außer indem man die Styles schlank hält?
Danke!
So long,
Andreas