Philipp Sauer: anderer Frame lädt im IE 6.0 nicht immer

Hallo!

Ich dachte eigentlich meine Anpass-Arbeiten am Navigations-Script abgeschlossen zu haben, bekam jetzt aber mehrfach Feedback, dass sich das Menü auf XP-Rechnern mit IE 6.0 nicht nutzen lies.

Wahrscheinlich ist das mit XP, ja ein Zufall, aber ich hab keine Ahnung woran das Problem liegt.
Der Broser beschwert sich beim Klick auf einen "Sublink" über die Zeile 110. Dort wird die Quelle des Hauptframes auf den neuen Wert gesetzt.

Bislang sah das wie folgt aus:

parent.frames('hauptframe').location.href=sUrl;

Und das lief bei mir auch. Habe es jetzt mal direkt mit:

parent.haupframe.location.href=sUrl;

probiert, hat aber auch nichts geädert.

Sieht irgendjemand was dort Probleme machen könnte?

Viele Grüße
Philipp

  1. hi,

    Der Broser beschwert sich beim Klick auf einen "Sublink" über die Zeile 110.

    und er sagt natürlich nur, "gegen zeile 110 möchte ich hiermit in aller form und auf's schärfte beschwerde einlegen", und gibt keine fehlermeldung aus, die auf die _ursache_ seiner beschwerde hinweisen würde.
    oder vielleicht doch ...?

    und was sagen andere browser zu dem script? z.b. der mozilla, dessen javascript -fehlermeldungen ja idR. etwas aussagekräftiger sind als die vom IE. (auch wenn diese browser kein fehlerhaftes verhalten zeigen - vielleicht erkennen sie ja trotzdem einen scriptfehler ...)

    gruss,
    wahsaga

    1. fehlermeldung aus, die auf die _ursache_ seiner beschwerde hinweisen würde.

      oder vielleicht doch ...?

      Der IE 6.0 meinte ganz aufschlussreich: "Ausnahmefehler".

      und was sagen andere browser zu dem script?

      In der Browserweiche werden nur IE 5.x und 6.x zum animierten Menü umgeleitet, in Netscape und Co hab ich das Script gar nicht zum laufen bekommen, drum gibt`s da ne statische Variante. Entsprechend auch keine hilfreiche Fehlermeldung.

  2. Ich dachte eigentlich meine Anpass-Arbeiten am Navigations-Script abgeschlossen zu haben, bekam jetzt aber mehrfach Feedback, dass sich das Menü auf XP-Rechnern mit IE 6.0 nicht nutzen lies.

    Wahrscheinlich ist das mit XP, ja ein Zufall, aber ich hab keine Ahnung woran das Problem liegt.

    Nein, ich kann das mit MSIE 6 unter Win98 nachvollziehen.

    parent.frames('hauptframe').location.href=sUrl;

    Das Unterobjekt »hauptframe« von »frames« kannst du mit parent.frames.hauptframe oder parent.frames['hauptframe'] ansprechen, da müssten also eckige Klammern hin. (Runde Klammern werden bei Funktionen/Methoden verwendet.) Und die Groß- und Kleinschreibung muss beachtet werden, frames['Hauptframe'] würde wahrscheinlich wieder nicht funktionieren.

    Und das lief bei mir auch.

    Das bezweifle ich...

    Habe es jetzt mal direkt mit:

    parent.haupframe.location.href=sUrl;

    Da fehlt ein »t« in »haupframe«. parent.hauptframe.location.href sollte dann auch klappen.

    1. Da fehlt ein »t« in »haupframe«. parent.hauptframe.location.href sollte dann auch klappen.

      Danke für die Antwort. Habe jetzt noch mal mit eckigen Klammern und

      parent.hauptframe.location.href =sUrl;

      getestet, leider ohne Erfolg. Ich bekomme jetzt gar keine Fehlermeldung mehr im IE, aber es wird einfach nicht die neue Seite geladen. Ich habe schon den Eindruck, dass eine Seite neu geladen wird, aber leider taucht im Hauptframe nix neues auf.

      1. Danke für die Antwort. Habe jetzt noch mal mit eckigen Klammern und

        parent.hauptframe.location.href =sUrl;

        getestet, leider ohne Erfolg. Ich bekomme jetzt gar keine Fehlermeldung mehr im IE, aber es wird einfach nicht die neue Seite geladen. Ich habe schon den Eindruck, dass eine Seite neu geladen wird, aber leider taucht im Hauptframe nix neues auf.

        Hm, da weiß ich auch nicht weiter. Ich hatte mir die relevanten Dateien lokal kopiert, den Code wie besagt angepasst und dann funktionierte es. Du kannst dir die Adresse ja vorher einmal mit window.alert(sUrl); ausgeben lassen. Dies sollte ja ein Dateiname sein. Vielleicht klappt es mit absoluten URLs, also indem du newPageSelect('http://www.vision-internetart.de/projekte/peter/delicado.html') usw. notierst?

        onClick="newPageSelect('delicado.html',this.id), ueber('TRIO DELICADO')"
                                                       ^ Hier müsste übrigens ein Semikolon hin, glaube aber nicht, dass es daran liegt, bei mir geht es trotzdem.

        Mathias

        1. Hm, da weiß ich auch nicht weiter. Ich hatte mir die relevanten Dateien lokal kopiert, den Code wie besagt angepasst und dann funktionierte es.

          Hast Du diese Datei noch? Vielleicht könntest Du sie mir ja mailen. Weiß zwar nicht wo der Unterschied zu meiner Datei liegen könnte, aber ich komm' überhaupt nicht weiter.

          »»Du kannst dir die Adresse ja vorher einmal mit window.alert(sUrl); ausgeben lassen. Dies sollte ja ein Dateiname sein.

          Es werden die richtigen Dateinamen ausgegeben. Ich sehe sogar in der Statuszeile, dass die HTML-Datei und auch die entsprechenden Bilder auf den Seiten geladen werden. Nur zu sehen bekomme ich sie leider nicht.

          »»Vielleicht klappt es mit absoluten URLs, also indem du newPageSelect('http://www.vision-internetart.de/projekte/peter/delicado.html') usw. notierst?

          Hab ich probeweise mal beim ersten Link so eingebaut. Bringt leider keinen Unterschied.

          Übrigens ein Semikolon hin, glaube aber nicht, dass es daran liegt,

          Hab auch das geändert, ohne Auswirkung. Müsste nicht eigentlich auch das vorletzte Zeichen ein Semikolon sein?

          Vielen Dank für Deine Mühe. Irgendwie befürchte ich, dass das mit meinem Menü nix mehr wird. Schon vor ein bis zwei Wochen hat mir jemand empfohlen den Code in die Tonne zu treten. :-(

          Viele Grüße aus dem verschneiten Nordhessen,
          Philipp

        2. Hm, da weiß ich auch nicht weiter.

          Was ich eben vergessen habe:

          Könnte der Fehler vielleicht auch im Javascript liegen, das das Frameset schreibt?

          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?

          Die Zeile sieht wie folgt aus:

          document.write("<html><head><title>guitarclassics Peter Ernst</TITLE><frameset framespacing="0" border="0" cols="255,*" frameborder="0">  <frame name="links" target="hauptframe" src="links.html" scrolling="auto" marginwidth="0" marginheight="0" topmargin="0" leftmargin="0">  <frame name="hauptframe" src="content.html" marginwidth="0" marginheight="0"  topmargin="0" leftmargin="0" scrolling="auto" target="Hauptframe"></frameset></bod<></html>");

          Grüße
          Fips

          1. 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.

            1. Ich danke Dir für Deine langen Ausführungen, sie haben mein Weihnachten gerettet. Ich hatte in der Tat schon Magenschmerzen, weil ich nicht mehr an eine Lösung geglaubt habe. Jetzt bin ich ganz und gar glücklich. Schöne Feiertage wünsche ich Dir!!