Internet Explorer 7, das Base Tag und ungünstige Umstände

25. März 2007 von stefan.haubold

Mit erschrecken hat mir ein Kunde heute mitgeteilt, dass er ein Darstellungsproblem im Internet Explorer 7 hat. Aus irgendwelchen, zu diesem Zeitpunkt mir unbekannten, Gründen, wurden im IE7 einige Bilder nicht geladen. Das Problem betraff nur Seiten, auf die durch einen virtuellen Pfad (RewriteRule) zugegriffen wurde. Das Problem musste also etwas mit dem Base Tag zu tun haben und wie der IE7 damit umgeht, in allen anderen Browsern inkl. IE6 gab es bisher keine Probleme.

Doch der IE7 war eigentlich ziemlich Unschuldig.

Eine erste Suche bei Google brachte mich schnell auf diesen Eintrag im IEBlog von Microsoft: All your <base> are belong to us

Nach kurzem Überfliegen des Textes befürchtete ich erst, dass im IE7 irgendwas am Base Tag geändert wurde. Nach genaueren Lesen, stellte ich aber fest, dass nur eine ganze Menge an grosszügigen Interprätationsspielräumen beim parsen des HTML Codes entfernt worden sind. Das Base Tag darf jetzt nur noch im Head vorkommen und möglichst auch nur einmal. (Ich will gar nicht darüber nachdenken, was Leute mit mehreren Base Tags angefangen haben). Nach dem Lesen des Textes habe ich also einfach mal mit der Developer Toolbar für den IE den DOM angeschaut und festgestellt, dass der IE7 kein Base Tag erkennen will. Was war also Falsch?

Als erstes änderte ich die Reihenfolge und setzte das Base Tag an die erste Stelle im HEAD. Das Problem war gelöst, das Base Tag wurde erkannt und die Bilder geladen. Nach einem kurzem Fluch auf den IE7 wollte ich die Sache aber genauer untersuchen. Ich benutze den IE7 zwar nicht, halte aber von Microsoft ansonsten nicht ganz so wenig wie ein großteil der Internetnutzer ansonsten gerne vorgibt, also konnte ich mir irgendwie nicht vorstellen, dass es ein Bug des IE7 ist.

Nach der Überprüfung aller anderen Tags (Meta, Link, Script) und verschiedenen Reihenfolgen der Tags im Head, lokalisierte ich den folgenden Javascript Eintrag als Fehler:




Dieser kleine Codeschnipsel ist für das herrvoragende Logfile Statistik Tool Awstats, mit hilfe dieses Javascripts erhält man in der normalen Zugriffsauswertung mehr Details über jeden Besucher. Z.B.: Auflösung, Flash Plugin, Java usw. Dazu generiert das Javascript bei Ausführung ein neues DIV in dem ein Image Tag gesetzt wird, dass im SRC wieder auf das Javascript zeigt. In der URL werden aber verschiedene GET Parameter gesetzt. Die abgerufene URL erscheint im Webserverlog und Awstats kann beim Auswerten die zusätzlichen Informationen speichern.

Tja, ein DIV Block gehört nur nicht in den HTML Head sondern in den Body der HTML Datei. Da ich Awstats schon seit ein paar Jahren benutze, habe ich die geringe Hoffnung, dass das damals noch nicht in der Anleitung stand, dass man den obrigen Codeschnipsel ans Ende des HTML Bodys einfügen soll und ich es deswegen ins HEAD gepackt habe. Eventuell habe ich damals aber auch einfach nicht zu Ende gelesen und ging davon aus, dass auch dieses Javascript in den HEAD gehört…

Lange Rede kurzer Sinn, das Javascript erzeugt das DIV per document.write also genau an die Stelle im HTML an der es eingebunden wird. Im konkreten Falls also im HEAD direkt vor dem Base Tag. Und genau das scheint der IE7 im Zusammenhang mit dem Base Tag nicht zu mögen (Was man ihm im Grunde auch nicht verübeln kann, der resultierende DOM ist nunmal absolut nicht valid), kurzerhand wird das Base Tag nicht mehr erkannt. Das nach dem Javascript auch auf die CSS Datei verwiesen wurde störte den IE7 aber wiederum nicht.

Das einbinden des Awstats Addons ist nun dahin gewandert wo es hingehört und nun gibt es auch kein Problem mehr mit dem IE7.

Abgelegt unter: Allgemein | Kommentare (0)

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.