Frame-Inhalte ändern über eine ID Arbeitsversion
Möglicherweise gibt es Probleme beim Umgang mit Frames / Framesets im IE8 wenn mehrere Tabs geöffnet sind. Offenbar liegt die Erklärung für das Verhalten des Browsers in den mit dieser Version eingeführten Funktionen des "Tab Groups and Tab Grouping". Eine Lösung muss gefunden werden.
|
|
Lösungsansatz: Frame-Inhalte ändern mit Javascript über eine ID
Rückmeldung eines Users (Browser: IE8)
Bei dem Tipp "Anzeige in einem bestimmten Frameset" ist mir aufgefallen, dass im IE8 die Abfrage (parent.frames.length == 0) nur korrekt funktioniert, wenn man sich im ersten TAB befindet ("tabbed browsing" im IE8).
Öffnet man das gleiche(!) Frameset noch einmal in einem zweiten TAB, dann ergibt die Abfrage (parent.frames.length == 0) in diesem zweiten TAB immer "true". Somit funktioniert das Script in diesem zweiten Tab nicht korrekt.
Ich habe bisher nur diese eine Rückmeldung!
Eine solche Fehlfunktion würde sich auf mehrere Beispiele zum Tausch von Frame-Inhalten und Frame-Escape auswirken! Muss ich sämtliche Beispielseiten anpassen?
Können Sie das bestätigen ?
Ich habe eine Test-Demo erstellt, mit der Sie das überprüfen können. Öffnen Sie die Demo zwei mal, jeweils in einem eigenen Tab des Browsers.
Test-Demo in einem neuen Browserfenster anzeigen: Test-Demo aufrufen 
Sie können mir das Ergebnis mitteilen: Kontaktformular aufrufen 
Mein Lösungsansatz
Ich experimentiere nun damit, bei der Definition des Framesets für die Frames IDs statt Namen (oder beides) zu vergeben.
Mit JavaScript und der internen Funktion "getElemetById" möchte ich die Frames ansprechen um deren Inhalte zu ändern. Bisher haben Sie auf meinen Beispielseiten lediglich die 'Ansprache' über den Namen des Frames oder über die (browserinterne) laufende Nummer des Frames kennen gelernt.
Natürlich würde sich eine solche Lösung nur für Browser anbieten, die auch "getElemetById" interpretieren können!
Wenn Sie möchten Sie können das testen
Ich habe ein Beispiel erstellt, dass die Vergabe von IDs für Frames beinhaltet. Um die Ansprache der Framesets über die ID zu testen, gibt es eine entsprechende JavaScript-Funktion, die einen Frame-Inhalt austauscht.
Beispiel-Frameset in einem neuen Browserfenster anzeigen: Test-Datei aufrufen 
Sie können mir das Ergebnis mitteilen: Kontaktformular aufrufen 
Die Steuerung von Frame-Inhalten über die ID wurde bisher getestet:
Internet Explorer
| IE 5 |
IE 6:0 |
IE 7 |
IE 8 |
IE 9 |
| - |
ok |
- |
- |
- |
FireFox
| FF 2 |
FF 3.0 |
FF 3.1 |
FF 3.6 |
FF 4 |
| - |
- |
- |
ok |
- |
Der Frameset als Ausgangsbasis
<frameset ... border="0" rows="100,*">
<frame id="FrameOben" ... scrolling="no" src="oben.htm">
<frameset ... border="0" cols="200,*">
<frame id="FrameLinks" ... scrolling="auto" src="menue.htm">
<frame id="FrameRechts" ... scrolling="auto" src="inhalt.htm">
</frameset>
</frameset>
Abfrage und Link
Um innerhalb der HTML-Seite im rechten Frame abzufragen, ob dem Browser ein Objekt mit der ID "" bekannt ist, notierte ich folgende Codezeilen:
if(!top.document.getElementById("FrameOben"))
{
document.write('Ein Objekt mit der ID "FrameOben" ist nicht bekannt');
}
else
{
document.write('Ein Objekt mit der ID "FrameOben" ist bekannt');
}
Die Aufgabe des Scripts ist es zu untersuchen, ob dem Browser ein Element mit der ID "FrameOben" bekannt ist und eine entsprechende meldung zu schreiben.
Der Schlüssel zur Abfrage eines Elements außerhalb der HTML-datei liegt in dem Ausdruck
top.document.getElementById("[ElementID]")
Erweitert um einen Link, der bei bekanntem Objekt die Funktion InhaltTauschen() zum Tauschen des Frameinhalts aufruft, sieht der Quellcode im Body-Bereich so aus:
if(!top.document.getElementById("FrameOben"))
{
document.write('Ein Objekt mit der ID "FrameOben" ist nicht bekannt. Diese Datei wurde nicht im Frameset geöffnet!');
}
else
{
document.write('Ein Objekt mit der ID "FrameOben" ist bekannt');
document.write('<a href="javascript:InhaltTauschen()">Inhalt tauschen</a>');
}
Funktion im Head-Bereich
Die Funktion hat die Aufgabe innerhalb eines Frameset im Frame mit der ID "FrameOben" die dort angezeigte HTML-Datei gegen die HTML-Datei mit der URL "oben02.htm" auszutauschen.
<script type="text/javascript" language="JavaScript">
<!--
function InhaltTauschen() {
top.document.getElementById("FrameOben").src = "oben02.htm";
return
}
//-->
</script>
Framinhalt mit onLoad() austauschen
2 Frameinhalte gleichzeitig ändern (Frame-Name)
2 Frameinhalte gleichzeitig ändern (Framenummer)
3 Frameinhalte gleichzeitig ändern (Name)
Grundlagen:
Frames Intro 0 - Einsatzbereiche
Frames Intro 1 - simple Definition
Frames Intro 2 - Namen + Inhalte bestimmen
Frames Intro 3 - Ränder, Margins, Abstand
Frames Intro 4 - Scrollbars , Resize
Frames Intro 5 - verschachtelte Framesets
Frames Intro 6 - NoFrames-Bereich
|