Ralf Kreusel: Anker in Nachbarframe

Guten Tag,

ich bin auf ein Problem gestossen, für das ich keine Lösung finde.

Ich will aus einem Frame heraus verschiedene Anker aufrufen, welche sich in mehreren Dokumenten befinden.Diese Dokumente sollen mit dem entsprechenden Anker in einem anderen Zielframe angezeigt werden als in dem, aus dem die Anker aufgerufen werden. Die Anker eines Dokuments funktionieren vorzüglich, wenn sich das entsprechende Zieldokument bereits aufgebaut hat (übrigens sind die Anker, wie auch die gesamten Texte, in einer Tabelle mit vielen, vielen Zeilen untergebracht). Ist das Zieldokument aber noch nicht aufgebaut, so wird es, wenn auf den Link im anderen Frame geklickt wird, zwar im Zielframe geladen, aber der Anker wird nicht respektiert, es erscheint der unterste Teil des Dokuments. Der Versuch, alle Dokumente in einem winzigen Frame unsichtbar vorzuladen, scheiterte ebenfalls.

Mein Script (A HREF="nameDokument.html#nameAnker TARGET="nameFrame") (A NAME="nameAnker") scheint ok zu sein.

Was kann ich tun, damit die Anker vom ersten Klick an funktionieren, ohne dass ich ein riesiges Dokument erstellen muss, welches alle Dokumente beinhaltet?

Vielen Dank für Ihre Antwort,

Ralf Kreusel

  1. Hi !

    Mein Script (A HREF="nameDokument.html#nameAnker TARGET="nameFrame") (A NAME="nameAnker") scheint ok zu sein.

    Was kann ich tun, damit die Anker vom ersten Klick an funktionieren, ohne dass ich ein riesiges Dokument erstellen muss, welches alle Dokumente beinhaltet?

    Ich hätte höchstens einen Ansatz zum Tüfteln... es gibt ja das ONLOAD-Event des Body-Tags, welches aufgerufen wird, wenn die Seite komplett geladen ist. Wenn man in diesem Event eine Variable setzt (z.B. seiteKomplettGeladen = 1) und statt der Links eine JavaScript-Funktion aufruft, könnte es hinhauen.

    Meine Idee

    (aufzurufendes Dokument)
    <HEAD>
    ...
    <SCRIPT LANGUAGE="JavaScript">
    <!--
        parent.frames["nav"].seiteKomplettGeladen = 0;
    //-->
    </SCRIPT>

    ...
    <BODY ONLOAD="parent.frames['nav'].seiteKomplettGeladen=1; return true;">
    ...

    die Links in der Navigation (im Beispiel ein Frame mit dem Namen "nav"):

    <A HREF="javascript:linkAufrufen(nr)">

    ...
    function linkAufrufen(nr)
    {

    // erstmal die Seite laden...

    parent.frames["inhalt"].location.replace(adresse[nr]);

    zielAnker = anker[nr];

    setTimeout("ankerLaden()",5000);
    }

    function ankerLaden()
    {
      if (seiteKomplettGeladen == 1)
      {
         parent.frames["inhalt"].document.location.hash = zielAnker;
      }
      else
      {
        setTimeout("ankerLaden()",5000);
      }
    }

    Dieses Skript fragt über eine Variable ab, ob die Seite geladen ist. Nachdem es das Laden der kompletten Seite "angeschmissen" hat, wird ein Timeout (in Millisekunden) gesetzt, welcher bei komplettem Laden den Anker ansteuert (Zeit muß ggf. angepasst werden)
    Ist die Seite noch nicht geladen, wird erneut ein Timeout gesetzt...

    Probier‚s mal aus, hab ich jetzt nur mal so gezaubert, aber noch nicht getestet - vielleicht kann man darauf aufbauen...

    CIAO
    H-Man