Menü

Proaktiv

Das Frameset nachladen

Das Frameset nachladen

Der größte Nachteil von Frames-Seiten ist, dass sie bei direktem Aufruf (etwa aus einer Suchmaschinen-Ergebnis-Seite = SERP) aus dem Zusammenhang (also dem Frameset) gerissen dargestellt werden. Das lässt sich aber leicht durch Javascript kompensieren. Damit fällt auch der prinzipielle Nachteil weg, dass auf einzelne Seiten nicht direkt verlinkt werden kann.

Hinweis: Diese Seite ist schon ewas älter


Beispiel:
http://www.beesign.com/webdesign/vergleich/frames/lang.html

Suchmaschinen - va. Google - ignorieren Javascript aber nicht völlig. Sie erkennen zwar nicht, was das Script genau macht, aber Begriffe wie "location" oder "replace" sind potentiell böse. Da dieselbe Technik auch bei Brückenseiten eingesetzt wird, kann das zu einer dramatischen Abwertung führen.

Weiterleitungen oder Frameset-Reloader sollten also keinesfalls über Scripts im Head der Seite gelöst werden, sondern erst ganz am Ende des Body. Wird ein Script zur Weiterleitung bereits im Head der Seite ausgeführt, stellt der Browser die Seite gar nicht mehr dar, sondern geht gleich weiter. Steht das Script aber erst am Ende der Seite, wird die Seite noch vollständig geladen und auch kurz dargestellt, bis die nächste Seite geladen ist. Damit ist diese Vorgehensweise für Brückenseiten nicht optimal - diese soll ja niemand sehen und Besucher werden dadurch abgeschreckt: Es gibt noch einige Leute mit Modem und langsamen Computer, die sich das in Ruhe ansehen können, bis die Weiterleitung greift.
Wenn hingegen eine Seite in ein Frameset nachgeladen wird, wird dieselbe Seite ja noch einmal dargestellt und es ist für Besucher offensichtlich, was hier vorgeht. Zudem ist die Seite dann ja schon geladen und wird wesentlich schneller dargestellt.

Der Reloader muss nicht auf die Startseite index.htm (=Frameset + dazugehöriges Script) weiterleiten, sondern auf eine Kopie davon; zB reload.htm, die anstelle der nachzuladenden Seite nur ein spärliches Seitchen ("Frameset wird nachgeladen..") enthält. Erstens wird dadurch enorm an Ladezeit gespart, zweitens kann index.htm damit weitgehend scriptfrei bleiben.

Ich verwende gerne folgende Variante (weil sie auch offline mit Dreamweaver funktioniert):

Im Head der index.htm muss folgendes Script einfügt werden:

<script language="JavaScript">
<!--
var FramesetGeladen = 1;
//-->
</script>

Es wird hier einfach die Variable FramesetGeladen auf "wahr" gesetzt, damit die Unterseiten wissen, dass alles in Ordnung ist.

In reload.htm - identisch mit index.htm, aber ohne <noframes> und mit schlanker Seite im nachzuladenden Frame - kommt folgendes Script:

<SCRIPT LANGUAGE="JavaScript">
<!--
var FramesetGeladen = 1;

function SeiteLaden() {
if(self.location.search.length > 0) {
var laenge = self.location.search.length;
var Neue_url = self.location.search.substring(1,laenge);
if (document.images)
self.framename.location.replace(Neue_url);
else
self.framename.location.href = (Neue_url);
}
}
//-->
</SCRIPT>

framename muss durch den "name" des nachzuladenden Frames ersetzt werden.

In das Frameset kommt noch:
<frameset onLoad="SeiteLaden(); return true;"

Damit wird das Nachladen gestartet.


Jede einzelne Seite, die nachgeladen werden soll, bekommt ganz am Ende des <body> folgendes Script:

<script language="JavaScript">
<!--
var ZielDatei = "reload.html?relativerpfad.htm";
var togo = 'to'+'p.lo'+'cation.';
if (!top.FramesetGeladen)
{
if(document.images)
eval(togo + 'replac'+'e(ZielDatei)');
else
eval(togo + 'hre'+'f = ZielDatei');
}
//-->
</script>

relativerpfad.htm muss auf jeder Seite durch den relativen Pfad von reload.htm aus ersetzt werden, auch der Pfad zu reload.htm muss relativ angegeben sein. Es gibt auch Scripts, die das anders - ohne individuelle Zieldatei machen, diese funktionieren aber häufig lokal mit Dreamweaver nicht. Ich bin aber für Vorschläge offen.

Das Zerstückeln der kritischen Befehle ('to'+'p.lo'+'cation) hat den Sinn, einer Abwertung durch unerwünschte Javascript-Befehle (top.location) zu entgehen. Man kann das bis zum Umfallen betreiben; solange die Suchmaschine das Script nicht tatsächlich ausführt, wird sie derartiges nicht erkennen.

Das Script richtet übrigens keine Schaden an, falls es - warum auch immer - nicht funktioniert. Die Seite wird einfach nicht nachgeladen. Vorsicht ist aber mit Schleifen geboten, die passieren, wenn das Frameset nicht geladen werden kann und die Seite das immer wieder versucht. Unbedingt durchchecken, ob auch tatsächlich jede Seite einzeln aufgerufen werden kann.

Ein Möglichkeit, die Frames mit PHP zu laden, ist bei Dr. Web beschrieben. Allerdings denke ich, dass bei dynamischen Seiten ohnehin auf Frames verzichtet werden sollte.


Bleibt noch zu erwähnen, dass nach dem Nachladen ein URL wie:
http://www.zeltstadt.at/leichtzelte/reload.html?shop/campingzelte.html
in der Adresszeile steht. Für das Versenden per Mail (-Newsletter) kann man diesen verwenden, nicht aber als Link im Web: Die Suchmaschine braucht die Seite reload.htm nicht zu kennen und durch die übergebenen Parameter ist der Link wertlos.

So ganz am Ende noch was:
Der oben erwähnte URL mit ? und den Parametern bleibt nun die ganze Zeit über stehen - auch wenn der Besucher nun "normal" innerhalb der Site navigiert. Das sieht nicht elegant aus. Der URL verschwindet erst, wenn den obligatorische "home"-Link nicht zur Homepage im Frame führt, sondern zur Domain selbst.
Also statt: href="home.htm" target="mainframe" zu http://www.domain.de/

Kommentare:

Ich fand diesen Tipp sehr hilfreich, da ich schon lange nach einer Lösung zu genau DIESEM Problem suche.

Antworten

Hat auf Anhieb funktioniert :) danke für den Tipp

Ozei
Antworten

Proaktiv

Wenn bei Frames das Frameset nachgeladen wird, kann auch direkt auf sie verlinkt werden.

Zurück