hecathe: Herausfinden, ob Frame bereits geladen ist.

Hallo Ihr!

auf der Suche nach der Lösung eines Problemes habe ich natürlich ;-) zuerst das Forum hier durchforstet. und auch folgenden Eintrag gefunden, der genau meinem Problem entspricht:

********************************

Frage:

ich such eine Funktion, die herausfinden kann ob eine Datei in
einem Frame schon vollständig ist oder nicht, da ich von einem
anderen Frame aus per javascript in diesen Frame eingreifen will.
Dabei muss sichergestellt sein, dass die Seite vollständig
geladen ist.

Antwort:

Eine Funktion gibt es direkt dafür nicht.
Aber indirekt lässt sich das onLoad() des jeweiligen Frames dafür benutzen.
Also im Frame dessen Ladezustand komplett sein soll steht:
  onLoad="parent.Anyfunction());"
oder
  onLoad="parent.FrameIstGeladen=1;"
Damit 'weiss' das Frameset, dass der jeweilige Frame geladen ist.
(Cross-frame geht mit parent.frames["framename"].IstGeladen=1 natürlich auch)

***************

da ihr es hier aber mit einem javascript-anfänger zu tun habt nun meine Bitte: kann mir das vielleicht jemand genauer "erläutern"? welche funktion schreibe ich in das onload? was muss in der funktion drin stehen?

Falls jetzt einige von Euch die Hände übern Kopf zusammenschlagen: Sorry! Ich bin eben ein newbie...

Liebe Grüße und Danke schonmal!
Hecathe

  1. Hi Hecathe,

    ich habe das jetzt so verstanden:

    1. Frame:
    Datei mit JavaScript (Funktion "geladen"), greift auf JS Funktionen von Frame 2 zu. Das darf allerdings erst geschehen, wenn die Seite in Frame 2 vollständig geladen ist.

    2. Frame:
    Datei mit JavaScript, welches von Frame 1 benötigt wird, sobald die Seite fertig geladen ist. Enthält im OnLoad Parameter im BODY Tag einen Funktionsaufruf, der die Funktion "geladen" in Frame 1 startet:
    <body onload="parent.frames['framea'].geladen('frame2')">

    Also weiss Frame 1 jetzt, dass Frame 2 fertig geladen ist. Ich hoffe das hilft...

    Ciao
    Andreas

    1. Hallo Andreas!

      ja, ich denke das hilft mir weiter!

      super! vielen Dank!!!!

      ciao
      Hecathe

      Hi Hecathe,

      ich habe das jetzt so verstanden:

      1. Frame:
        Datei mit JavaScript (Funktion "geladen"), greift auf JS Funktionen von Frame 2 zu. Das darf allerdings erst geschehen, wenn die Seite in Frame 2 vollständig geladen ist.
      1. Frame:
        Datei mit JavaScript, welches von Frame 1 benötigt wird, sobald die Seite fertig geladen ist. Enthält im OnLoad Parameter im BODY Tag einen Funktionsaufruf, der die Funktion "geladen" in Frame 1 startet:
        <body onload="parent.frames['framea'].geladen('frame2')">

      Also weiss Frame 1 jetzt, dass Frame 2 fertig geladen ist. Ich hoffe das hilft...

      Ciao
      Andreas

  2. hi,

    Du setzt im Frame per body onload eine variable auf einen bestimmten Wert. Die Variable und deren Wert kannst Du aus einem anderen Frame heraus abfragen. Dabei musst Du aber auch das _Vorhandensein_ des fraglichen Frames überprüfen, und falls nicht vorhanden/geladen, den ganzen Vorgang wiederholen.

    also, im zu ueberpruefenden Frame setzt Du:

    <script language="javascript1.2">var myVar = 0;</script>
    <body onload="myVar=1">

    Erst wenn der Frame geladen ist wird die Variable somit auf true gesetzt. Im pruefenden Frame brauchst Du folgende Funktion (ebenfalls per body onload rufen). Hierbei wir geprueft, ob Frame da und Variable auf true, andernfalls wird per setTimeout das Ganze nach 500 ms wiederholt.

    function checkFrame() {
      if(top.FRAMENAME && top.FRAMENAME.myVar) alert('feddich');
      else setTimeout('checkFrame()', 500);
    }

    Gruesse  Joachim

    1. super! vielen Dank!!!

      hi,

      Du setzt im Frame per body onload eine variable auf einen bestimmten Wert. Die Variable und deren Wert kannst Du aus einem anderen Frame heraus abfragen. Dabei musst Du aber auch das _Vorhandensein_ des fraglichen Frames überprüfen, und falls nicht vorhanden/geladen, den ganzen Vorgang wiederholen.

      also, im zu ueberpruefenden Frame setzt Du:

      <script language="javascript1.2">var myVar = 0;</script>
      <body onload="myVar=1">

      Erst wenn der Frame geladen ist wird die Variable somit auf true gesetzt. Im pruefenden Frame brauchst Du folgende Funktion (ebenfalls per body onload rufen). Hierbei wir geprueft, ob Frame da und Variable auf true, andernfalls wird per setTimeout das Ganze nach 500 ms wiederholt.

      function checkFrame() {
        if(top.FRAMENAME && top.FRAMENAME.myVar) alert('feddich');
        else setTimeout('checkFrame()', 500);
      }

      Gruesse  Joachim