jaybee: kleines Problem mit einem JavaScript/Frames

Hi

habe folgendes Script eingebaut:

http://aktuell.de.selfhtml.org/artikel/javascript/dyn-frames/index.htm

Leider habe ich nun erst gesehen, dass noch ein kleines Problem entsteht.

Wenn jemand z.B. folgende Seite lädt, wird sie korrekt danach in das passende Frame eingebunden und alle Frames werden auch angezeigt:

http://www.sega-arcade.de/games/After_Burner_Climax.htm

Wenn ich nun aber die Hauptseite lade, wird auch das komplette Frameset der index.htm im target="main" angezeigt, also doppelt:

http://www.sega-arcade.de

In der Spieleseite zu After Burner Climax habe ich folgendes hinterlegt:

<script language="JavaScript">
<!--
 function checkFrameset() {
  if(!parent.main)
   location.href="http://www.sega-arcade.de/index.htm?" + location.pathname;  } //--> </script> <body onLoad='checkFrameset()'>

Und in der index.htm folgendes:

<script language="JavaScript">
<!--
 function checkFramecall() {
  var Adressanhang=location.search;
  if(Adressanhang)
  frames.main.location.href=Adressanhang.substring(1,Adressanhang.length);
 }
//-->
</script>

<frameset rows="90,*" border="0" frameborder="0"> <frameset cols="185,*" border="0" frameborder="0"> <frame src="obenlinks.htm" name="obenlinks" scrolling="no" /> <frame src="oben.htm" name="oben" scrolling="no" /> </frameset> <frameset cols="185,*" border="0" frameborder="0" onLoad="checkFramecall()"> <frame src="links.htm" name="links" scrolling="no" /> <frame src="main.htm" name="main" scrolling="auto" /> </frameset> <noframes> <body> <a href="http://www.sega-arcade.de/links.htm">Informationen und Wissenswertes zu History, Hardware, Software sowie massig Downloads wie Demovideos, Wallpaper, Trailer, Flyer uvm...!</a><a href="http://www.sega-arcade.de/main.htm">text</a>
</body>
</noframes>
</frameset>

Kann mir da jemand weiterhelfen, wo der Fehler liegt, da ich bisher nicht dahinter gekommen bin, vielen Dank schon mal für jede Hilfe...

Gruß
Jörg Burkart

  1. Hallo Namensvetter,
    Zwei Dinge vorneweg:

    1.) Du solltest, wenn irgend möglich, auf Frames verzichten. Das von Dir beschriebene Problem ist nämlich nur ein Symptom der unzähligen Nachteile, die Frames mitbringen. Ich unterstelle Dir mal, dass Du mit der HTML-Bastelei gerade angefangen hast (hoffe damit trete ich Dir nicht zu nahe), und da sind Frames zugegeben sehr verlockend - die Nachteile sieht man dann erst später, und dann nervt es einen furchtbar. Ich habe selber noch Frame-Leichen in meinem HTML-Keller, ich weiß wovon ich rede ;)

    2.) Du verwendest für das Layout Tabellen. Auch das ist nicht mehr wirklich zeitgemäß und macht so eine Seite ziemlich unübersichtlich wenn man was ändern muss. Am besten Du guckst Dir mal das SelfHTML-Kapitel über CSS-Layouts an -damit geht das deutlich übersichtlicher.

    Dies nur als gut gemeinte Ratschläge, die Du natürlich nicht beherzigen musst, aber Deine Seite wird dadurch erheblich aufgewertet, sowohl für den End-Benutzer als auch für Dich als Ersteller. Wenn Du das angehen willst, findest Du bei SelfHTML alles was Du brauchst, und im Forum sind ja auch viele hilfsbereite Leute unterwegs, die Dir bei Fragen mit Rat und Tat zur Seite stehen.

    So, nun aber zu Deinem Problem:
    Du schachtelst zwei Framesets ineinander: Du hast einmal das Frameset auf der index.htm und dann nochmal eins in der main.html.

    Die Erkennung in den Main-Unterseiten prüfen aber:

      
     function checkFrameset() {  
      if(!parent.main)  
       location.href="http://www.sega-arcade.de/index.htm?" + location.pathname;  }  
    
    

    Das wird dann natürlich nichts mehr, weil "parent" ist dann nicht mehr das äußere Frameset, sondern das innere von "main.htm" -> die Seite merkt nicht, dass sie bereits in einem Frameset aufgerufen wird, und macht deswegen nochmal eins auf.

    Du bräuchtest also in den Main-Unterseiten "parent.parent.main". Alternativ dazu kannst Du "top.main" benutzen, damit greifst Du IMMER auf das "main"-Frame des aller äußersten Framesets zu, ganz egal, wie viel Schachtelungen Du hast.

    Viele Grüße,
    Jörg

    1. Danke, mit dem top.main hat´s nun geklappt...

      Ich weiß ja, dass meine Webseiten allesamt mehr oder weniger auf dem Stand von ca. 2000 sind, wo ich mit den Seiten begonnen habe, aber mir fehlt leider echt die Zeit, alle Seiten auf einen neueren Stand zu bringen... :))

      1. aber mir fehlt leider echt die Zeit, alle Seiten auf einen neueren Stand zu bringen... :))

        Aus eigener Erfahrung kann ich dir sagen, dass das Rumgefrickel an altem Code wesentlich mehr Zeit frisst als neuen Code sauber zu schreiben.

        Mag ja sein, dass du dir aktuell Zeit sparst, spätestens wenn du nochmal einen solchen Fehler suchst, ist der Zeitvorteil dahin.