Stefan Bion: Von einer NoFrames-Seite per Links auf versch. Seiten in Frame-Seite

Beitrag lesen

Mit JavaScript geht das, indem man die Frameset-Datei mit dem Namen der Seite als Parameter aufruft (z.B. index.htm?seite.htm). Dieser Name muß dann in der Frameset-Datei in das dynamisch generierte Frameset eingefügt werden, woraufhin diese Seite dann im richtigen Frame geladen wird. Hier (m)ein Lösungsvorschlag, der eigentlich dazu gedacht war, ein fehlendes Frameset "nachzuladen":

Seite im richtigen Frameset nachladen

Voraussetzung: JavaScript muß aktiviert sein (wenn nicht, dann wird
die Seite einfach ohne Frameset geladen).

Wichtig: Unbedingt eigene, eindeutige Frame-Namen verwenden, da sonst
die Identifizierung des eigenen Framesets durch das Script nicht mehr
eindeutig wäre!

1.) Frameset (z.B. index.htm):

<head>
    ...
    <script language="JavaScript">
    <!--
      // Aus fremden Frames befreien!
      if(top.frames.length>0) top.location.href=location.href;
    // -->
    </script>
  </head>

<script language="JavaScript">
  <!--
    var seite=location.search.substring(1,location.search.length);
    if(seite.length==0) seite="start.htm";

document.write('<frameset cols="*,150" border=0 frameborder=0
framespacing=0>');
    document.write('  <frame src="' + seite + '" name="HauptFenster">');
    document.write('  <frame src="menu.htm" name="MenueFenster">');
    document.write('</frameset>');
   // -->
   </script>

<noscript>
    <frameset cols="*,150" border=0 frameborder=0 framespacing=0>
      <frame src="start.htm" name="HauptFenster">
      <frame src="menu.htm" name="MenueFenster">
    </frameset>
  </noscript>

2.) Einzelne Seiten, die im Frame "HauptFenster" geladen werden:

<head>
    ...
    <script language="JavaScript">
    <!--
      function checkFrames()
      {
        if(top.frames.length==0 top.frames[0].name!="HauptFenster")

top.location.href="index.htm?"+location.href.substring(location.href.lastIndexOf("/")+1,location.href.length);
      }
    // -->
    </script>
  </head>

<body onLoad="checkFrames()" ...>
    ...

Der Index top.frames[x] muß entsprechend dem Aufbau des Framesets
angepaßt werden. Der Wert 0 bezieht sich auf den ersten definierten
Frame.

Es ist wichtig, die Funktion checkFrames() mittels onLoad aufzurufen,
damit das Laden der Seite nicht vorzeitig abgebrochen wird, da es sonst
passieren kann, daß die Seite nur unvollständig im Frameset nachgeladen
wird (Browser-Cache).

Bei Seiten, die standardmäßig im Hauptframe geladen werden (hier:
start.htm) braucht hinter "index.htm" kein weiterer Parameter angegeben
zu werden. Hier genügt also: top.location.href="index.htm";

Gruß,
Stefan