SELFHTML: JavaScript / Objektreferenz / frames
Author: Redaktion SELFHTML, selfhtml81@selfhtml.org
Description: Welche Aufgaben, Eigenschaften und Methoden das window-Objekt in JavaScript hat.
Keywords: SELFHTML, JavaScript, Objekte, frames, length
Date: 2005-08-22T21:21:39+02:00

| # frames
| frames: Allgemeines zur Verwendung Auf JavaScripts in anderen Frames zugreifen ### Eigenschaft: length (Anzahl Frames) ### Unterobjekte: document event history location

## frames: Allgemeines zur Verwendung

Mit dem Objekt `frames` haben Sie Zugriff auf Frames, also auf ein Frame-Set und seine Frame-Fenster, die in einer HTML-Datei definiert sind.

Da jedes Frame-Fenster aus Sicht des Browsers ein eigenes Fenster darstellt, ist das `frames`-Objekt lediglich eine Variante des window-Objekts, also des allgemeinen Fensterobjekts. Alle Eigenschaften und Methoden, die zum `window`-Objekt gehören, lassen sich auch auf das `frames`-Objekt, also auf einzelne Frame-Fenster anwenden. Das `frames`-Objekt stellt nur deshalb ein eigenes Objekt dar, weil es eine zusätzliche Eigenschaft enthält, und weil bei der Adressierung von Frame-Fenstern in JavaScript ein paar Besonderheiten zu beachten sind:

### Schema 1 / Beispiel 1:

    parent.frames[#].Eigenschaft/Methode();

    parent.frames[1].location.href = "sport.html";

### Schema 2 / Beispiel 2:

    parent.NameDesFrames.Eigenschaft/Methode();

    parent.RechtesFenster.back();

### Erläuterung:

`parent` ist ein reservierter Fenstername, den Sie zum Ansprechen von Fenstern innerhalb eines Frame-Sets verwenden können. Anstelle von `parent` können Sie auch `top` verwenden. Mit `parent` sprechen Sie das Eltern-Fenster des aktuellen Frame-Fensters an, mit `top` in jedem Fall das oberste Anzeigefenster des Browsers.

Frame-Fenster können Sie auf zwei Arten ansprechen:

- mit einer Indexnummer (wie in Schema 1 / Beispiel 1)
  Bei Verwendung von Indexnummern geben Sie `frames` an und dahinter in eckigen Klammern, das wie vielte Frame-Fenster im Frame-Set Sie meinen. Beachten Sie, dass der Zähler bei 0 beginnt, d.h. das erste Frame-Fenster sprechen Sie mit `frames[0]` an, das zweite Frame-Fenster mit `frames[1]` usw. Beim Zählen gilt die Reihenfolge, in der die `<frame>`-Befehle im Frame-Set definiert sind.
- mit dem Namen des Frame-Fensters (wie in Schema 2 / Beispiel 2)
  Dabei geben Sie den Namen an, der bei der HTML-Definition des Frame-Fenster bei `<frame ...>` im Attribut `name` definiert worden ist.

Da das `frames`-Objekt eigentlich eine Variante des window-Objekts ist, können Sie nicht nur die alle Eigenschaften und Methoden des `window`-Objekts auf das frames-Objekt anwenden, sondern auch alle anderen, die in der Hierarchie unterhalb des `window`-Objekts stehen. Ebenso, wie Sie beispielsweise mit `window.document.forms[0].elements[0].value = "Stefan"` den Inhalt eines Formular Eingabefelds in einer gewöhnlichen HTML-Datei ändern können, können Sie das gleiche innerhalb eines Frame-Sets etwa mit `parent.frames[1].document.forms[0].elements[0].value = "Stefan"` erreichen.

Ein typisches Anwendungsbeispiel für den Einsatz des Frame-Objekts finden Sie in diesem Dokument: Zwei Frames gleichzeitig ändern.

## Auf JavaScripts in anderen Frames zugreifen

Mit der gleichen Syntax, wie Sie auf HTML-Elemente in anderen Frame-Fenstern zugreifen können, können Sie auch auf JavaScripts zugreifen, die in einem anderen Frame-Fenster aktuell notiert sind. So können Sie Variablen des anderen Scripts auslesen und Funktionen des anderen Scripts aufrufen.

Das folgende Beispiel zeigt ein Frameset mit zwei Fenstern oben und unten. Das obere Fenster hat bei der Frameset-Definition den Namen `oberesFenster` erhalten. Aus dem unteren Frame-Fenster wird nun auf ein JavaScript im oberen Frame-Fenster zugegriffen

### Beispieldatei im oberen Frame-Fenster:

Anzeigebeispiel: So sieht's aus

    <html><head><title>Test</title>
    <script type="text/javascript">
    var c = 0;

    function gibaus_c () {
      alert(c);
    }

    function erhoehe_c () {
      c++;
      window.setTimeout("erhoehe_c()", 100);
    }
    </script>
    </head><body onload="erhoehe_c()">
    <p>Hier wird einfach nur 10 mal pro Sekunde die Variable <i>c</i> erh&ouml;ht!</p>
    </body></html>

### Beispieldatei im unteren Frame-Fenster:

    <html><head><title>Test</title>
    <script type="text/javascript">
    function reset_c () {
      parent.oberesFenster.c = 0;
    }
    </script>
    </head><body>
    <p>
    <a href="javascript:parent.oberesFenster.gibaus_c()">Variable <i>c</i> anzeigen!</a><br>
    <a href="javascript:reset_c()">Variable <i>c</i> auf 0 setzen!</a>
    </p>
    </body></html>

### Erläuterung:

Im oberen Fenster ist ein Script mit zwei Funktionen namens `gibaus_c()` und `erhoehe_c()` notiert. Die Funktion `erhoehe_c()` wird mit dem Event-Handler `onload` im einleitenden `<body>`-Tag erstmals gestartet und ruft sich dann mit Hilfe der Methode setTimeout() alle 100 Millisekunden, also 10 mal pro Sekunde selber wieder auf. Dabei erhöht sie jedesmal die Variable `c` um 1.

Im unteren Fenster sind zwei Verweise notiert. Der erste gibt den aktuellen Zählerstand von `c` aus. Dazu wird mit `parent.oberesFenster.gibaus_c()"` auf die Funktion `gibaus_c()` im anderen Frame-Fenster zugegriffen. Der zweite Verweis ruft eine Funktion `reset_c()` auf, die im Dateikopf des eigenen Dokuments notiert ist. Diese greift jedoch mit `parent.oberesFenster.c` auf die Variable `c` im anderen Frame-Fenster zu und setzt diese auf 0 zurück.

## length

Speichert, wie viele Frame-Fenster ein übergeordnetes Fenster enthält.

### Beispiel:

Anzeigebeispiel: So sieht's aus

    <html><head><title>Test</title>
    <script type="text/javascript">
    for (var i = 0; i < parent.frames.length; i++)
      alert(parent.frames[i].name);
    </script>
    </head><body>
    </body></html>

### Erläuterung:

Mit `parent.frames.length` oder `top.frames.length` können Sie die Anzahl der Frame-Fenster ermitteln. Im Beispiel wird angenommen, dass die HTML-Datei innerhalb eines Frame-Sets aufgerufen wird. Beim Einlesen der Datei gibt die Datei mit der Methode `alert()` nacheinander die Namen aller Frame-Fenster im Frame-Set aus. Dazu dient die for-Schleife. Die Eigenschaft `parent.frames.length` dient als Abbruchbedingung für die Schleife. Da der Schleifenzähler `i` bei jedem Schleifendurchlauf um 1 erhöht wird, wird mit `parent.frames[i]` jeweils das nächste Frame-Fenster angesprochen.

| document
| window

© 2007 Impressum