Ich habe da ja ne Browserweiche gebastelt und schreibe dann für die neuer IEs mit document.write ein entsprechendes Frameset. Habe ich da vielleicht irgendwas falsch maskiert?
Nein, die Maskierung ist okay, da war lediglich einer kleiner Fehler bei </bod<>.
Ich denke, es liegt am doppelten Frameset. Du schreibst ja per JavaScript im Kopf des Dokuments frameset2.html ein komplettes Dokument, falls der Browser MSIE ist. Das ist strenggenommen so nicht möglich, <frameset>...</frameset> müsste zumindest nach dem head geschrieben werden (mal ganz davon abgesehen, dass dies sowieso nicht valide ist, aber es muss ja nur MSIE verstehen, der drückt beide Augen zu). Heraus kommen zwei Framesets, ein per JavaScript geschriebenes und ein weiteres, statisches mit gleichen Bezeichnern danach. Von diesen beiden wird aber nur eines angezeigt, nämlich das erste. Und zwei der vier Frames sind über JavaScript ansprechbar sind, nämlich die beiden letzten. frames.hauptframe spricht also den nicht sichtbaren Frame an. Das würde MSIEs Verhalten erklären. javascript:alert(top.mitte.hauptframe.location.href); in der Adresszeile liefert immer die Adresse des nicht sichtbaren Frames, und diese ändert sich durchaus beim Durchklicken des Menüs.
Wenn du beispielsweise die statische frameset-Definition nach dem head auskommentierst, sollte es gehen. Daher würde ich dir raten, in frameset2.html nur mit einem statischen Frameset zu arbeiten, mit <frame name="links" src="links2.html" ..> für den linken Frame. Das spezielle MSIE-Menü kannst du dann in links.2html nachladen, indem du dort im script-Element im head direkt zu links.html weiterleitest:
if ( (navigator.appVersion.substring(19,21)=="IE") && (navigator.appVersion.substring(22,23)>4))
location.href='links.html';
Übrigens könnte man sich die Maskiererei dadurch sparen, dass man zur Stringbegrenzung andere Anführungszeichen verwendet, als vornehmlich im String vorkommen (möglich sind 'einfache' und "doppelte"). Du hättest also einfach document.write('<frameset framespacing="0" border="0" cols="255,*" frameborder="0"> ...'); schreiben können, ohne jedes doppelte Anführungszeichen maskieren zu müssen, aber das sollte jetzt sowieso nicht mehr nötig sein.