Frames perfekt mit JavaScript verwalten

Quelltext von frameman.js

Dies ist die Auflistung der Datei beispiele/frameman.js, die in den HEAD-Teil der frameset-Datei eingebunden werden muß um die untergeordneten frames zu verwalten.

Im folgenden Quelltext sind Kommentare grün markiert.

/* -------------------------------------------------------------------------
 * Framesteuerung
 * von Ulrich Kritzner, 2002
 * (c) 2002 Ulrich Kritzner.
 * Die Verbreitung dieser Datei unterliegt der GNU General Public License.
 *
 * Frame Control
 * Written by Ulrich Kritzner, 2002
 * Copyright 2002 by Ulrich Kritzner.
 * Redistribution of this file is permitted under the GNU General Public License.
 * ------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------
 * Diese JavaScript-Datei MUSS von der Frames-Haupseite,
 * also der Seite, auf der das Frameset definiert wird,
 * eingebunden werden, um den Frame-Manager verwenden zu koennen.
 * Dies muss im HEAD-Teil vor der Definition des Framesets
 * vorgenommen werden.
 * ------------------------------------------------------------------------- */



/* -------------------------------------------------------------------------
 * Deklarationen globaler Variablen:
 * ------------------------------------------------------------------------- */
var framenums,framelist;
var useReplace=0;



/* -------------------------------------------------------------------------
 * An InitFrameMan muss ein Array der Nummern der Frames uebergeben werden,
 * die vom Framemanger verwaltet werden sollen.
 * Dann setzt es das Array aller zu verwaltenden Framenummern.
 * Dies muss in der Frameset-Quelldatei
 * vor der Deklaration des Framesets geschehen.
 * Beispiel:
 * InitFrameMan(Array(0,1,2))
 * ------------------------------------------------------------------------- */
function InitFrameMan(_framenums)
{
  framenums=_framenums;
  framelist=Array();
  /* wenn das Objekt window.location existiert: */
  if (window.location)
    /* und wenn window.location.replace als Funktion existiert: */
    if ((typeof(window.location.replace)=="function")||
        (typeof(window.location.replace)=="object"))
      /* dann erlaube die Benutzung der replace-Funktion: */
      useReplace=1;
}



/* -------------------------------------------------------------------------
 * An SetFrameURLs muss einen String mit dem Namen des Themas
 * und ein Array von URL-Strings uebergeben werden.
 * Dann legt es ein neues Thema mit den zugehoerigen URLs an
 * und fuegt es an das Themenarray an.
 * Dies muss in der Frameset-Quelldatei
 * vor der Deklaration des Framesets geschehen.
 * Beispiel:
 * SetFrameURLs("Thema1",Array("Thema1a.html","Thema1b.html","Thema1c.html"))
 * ------------------------------------------------------------------------- */
function SetFrameURLs(_theme,_URLs)
{
  /* leeres Objekt erzeugen: */
  var entry=new Object();
  /* Objektfelder anlegen: */
  entry.theme=_theme;
  entry.URLs=_URLs;
  /* Objekt an das Manager-Array anfuegen: */
  framelist[framelist.length]=entry;
}



/* -------------------------------------------------------------------------
 * An ManageFrames muss das aktuelle Window-Objekt
 * sowie einen String mit dem Namen des Themas uebergeben werden.
 * Dann setzt es alle anderen Frames auf die dem Thema entsprechenden Inhalte.
 * Dies muss in jeder einzelnen Framedatei
 * durch das "onLoad"-Ereignis ausgeloest werden,
 * sonst scheitert die Frameverwaltung.
 * Beispiel:
 * parent.ManageFrames(window,"Thema1")
 * ------------------------------------------------------------------------- */
function ManageFrames(_window,_theme)
{
  var i,f=0;
  /* aktuelles Thema setzen,
  damit die Seite nicht mehrfach upgedatet wird: */
  _window.theme=_theme;
  /* Array aller Themen durchgehen: */
  for (i=0;i<framelist.length;i++)
  {
    if (framelist[i].theme==_theme)
      f=i;
  }
  /* wenn das Thema nicht definiert ist: Funktionsabbruch */
  if (framelist[f].theme!=_theme)
    return;
  /* alle zu verwaltenden Frames manipulieren: */
  for (i=0;i<framenums.length;i++)
    /* wenn ein Frame noch nicht zum Thema gehoert: */
    if (typeof(frames[framenums[i]].theme)=="string")
      if (frames[framenums[i]].theme!=_theme)
      {
      /* Thema auf Frame setzen, um Mehrfachupdates zu vermeiden: */
        frames[framenums[i]].theme=_theme;
      /* wenn die replace-Funktion verwendet werden soll: */
        if (useReplace)
          frames[framenums[i]].location.replace(framelist[f].URLs[i]);
      /* ansonsten (MSIE) ganz normal Seiten-URL setzen
        und Unbrauchbarkeit der history in Kauf nehmen: */
        else
          frames[framenums[i]].location.href=framelist[f].URLs[i];
      /* Thema auf Frame setzen, um Mehrfachupdates zu vermeiden: */
        frames[framenums[i]].theme=_theme;
    }
}
Autor: Ulrich Kritzner