Rothschopf Werner

rowex ganz privat

Angebote

iFrames nachladen

Ich habe längere Zeit nach einem JavaScript zum nachlanden von iFrames gesucht und keine fertige Lösung gefunden. Ich habe schluss endlich ein eigenes JavaScript erstellt, das ich vorstelle.

Ausgangslage

Man kann zu iFrames stehen wie man will (ich mag sie eigentlich nicht), aber bei der Überarbeitung des Webdesigns von emmane.at habe ich mich dafür entschieden nicht alle Seiten in das neue Design zu bringen, sondern ihnen lediglich einen "Rahmen" im neuen Design zu verpassen. Da viele Seiten bereits in den Suchmaschinen geindext waren, musste eine Lösung her diesen Rahmen bei einem eventuellen Seitenaufruf nachzuladen.

Vorbereitungen

Alle Seiten, bei denen das iFrame nachgeladen werden soll müssen folgendes JavaScript aufrufen:

if (parent.frames.length == 0) 
  window.location.href="rahmen.htm?"+this.location.href;

Ich habe daher das Script selber in eine .js Datei ausgelagert, bei mir eben als z_style/noiasca.js direkt unter root. Daher erhält jede Seite, die einen iFrame erhalten soll folgenden Verweis auf das externe JavaScript im Head-Bereich:

<script type="text/javascript" src="z_style/noiasca.js"></script>

Anschließend wurde eine Datei mit dem iFrame unter dem "rahmen.htm" erstellt.

<iframe name="I1" id="I1" width="800" height="450" 
  src="rahmen_info.htm" target="_blank">

Die Größenangaben des iframe sind natürlich frei wählbar und soll zum restlichen Design passen. Der Name I1 ist wichtig, da er im folgenden JavaScript verwendet wird.

Zusätzlich erhält diese rahmen.htm im head-Abschnitt folgendes JaveScript:

<script type="Text/JavaScript">
<!--

function lade() {
 if(window.location.search != "") {
  woher=window.location.search;
  woher=woher.split("?");
  window.frames.I1.location.href=woher[1];
 }
}
//-->
</script>

wie zuvor erwähnt, ist es wichtig, dass beim Aufruf von

window.frames.I1.location.href=woher[1];

das I1 mit dem Namen des iFrames übereinstimmen muss.

Die Funktion lade() wird durch einen Zusatz am BODY-Tag beim Aufruf der Seite durchgeführt:

<body onload="lade()">

Funktionsweise

Wird nun eine Seite aufgerufen, die folgendes JavaScript enthält:

if (parent.frames.length == 0) 
  window.location.href="rahmen.htm?"+this.location.href;

passiert folgendes:

Zeile 1: hier wird geprüft, ob die Seite in einem Frame geladen wird.

Zeile 2: Wenn nicht, wird ein neuer URI aufgerufen, nämlich die rahmen.htm?"eigener Name.htm"

Nun wird die rahmen.htm geladen.

In der rahmen.htm wird der übergebene URI in der Funktion lade() zerlegt und im iFrame der Abschnitt nach dem ? im iFrame I1 dargestellt.

Hinweise

Aus optischen Gründen habe ich dann noch ein "Standard-Seite" für den iFrame erstellt. Die Datei rahmen_info.htm wird nur angezeigt, wenn der Benutzer in seinem Duscher auf den Zurück-Button drückt. Hier könnte man nun den Benutzer darauf hinweisen, dass das Zurück-Blättern bei dieser einen Seite eben nicht möglich ist.


Erstellt: 17.04.2008 | letztes Update: 31.12.2014