Marius Koehler: JavaScript-Variable aus einem anderen Frame

Hi nochmal,

ich möchte aus einem Frame eine Variable in einem anderen Frame auslesen.

Ich habe es schon mit PARENT.FRAMENAME.DOCUMENT.VARIABLE versucht, aber ich bekomme die Meldung 'Syntax error', wobei der Pfeil auf den Framenamen zeigt.

Ich habe schon alles gecheckt, auch Groß/Kleinschreibung, mit eckigen Klammern experimentiert, aber ich komme nicht weiter.

Ciao, Marius

  1. Hallo Marius,

    ich möchte aus einem Frame eine Variable in einem anderen Frame auslesen.
    Ich habe es schon mit PARENT.FRAMENAME.DOCUMENT.VARIABLE versucht, aber ich bekomme die Meldung 'Syntax error', wobei der Pfeil auf den Framenamen zeigt.

    Ich hab mir in solchen Faellen immer mit einem versteckten Formular beholfen.

    Step 1: Das versteckte Formular wird irgendwo in der Datei definiert, in der auch das Script mit der Variablen steht:
    <form name="daten">
    <input name="speicher_1" type=hidden value="">
    </form>

    Step 2: Wenn der Wert der Variablen sich aendert, muss immer auch das Formularfeld mit dem Wert versorgt werden. Beispiel:
    var dieVariable = "Hallo Welt";
    document.daten.speicher_1.value = dieVariable;

    Step 3: Aus einem anderen Frame kann ein Script nun den Variableninhalt des Frames auslesen:
    var Name = parent.FrameName.document.daten.speicher_1.value;

    Viele Gruesse
      Stefan Muenz

    1. Hallo Stefan,

      ich möchte aus einem Frame eine Variable in einem anderen Frame auslesen.
      Ich habe es schon mit PARENT.FRAMENAME.DOCUMENT.VARIABLE versucht, aber ich bekomme die Meldung 'Syntax error', wobei der Pfeil auf den Framenamen zeigt.

      Ich hab mir in solchen Faellen immer mit einem versteckten Formular beholfen.
      ...
      Step 2: Wenn der Wert der Variablen sich aendert, muss immer auch das Formularfeld mit dem Wert versorgt werden. Beispiel:
      var dieVariable = "Hallo Welt";
      document.daten.speicher_1.value = dieVariable;
      Step 3: Aus einem anderen Frame kann ein Script nun den Variableninhalt des Frames auslesen:
      var Name = parent.FrameName.document.daten.speicher_1.value;

      Das ist aber nicht notwendig.
      So, wie Du auf den Inhalt des Formulars zugreifen kannst, kannst Du das auch mit der Variablen direkt machen

      var Name = parent.FrameName.dieVariable;

      und sparst Step 1 und Step 2.

      Christine

      1. Hallo Christine,

        So, wie Du auf den Inhalt des Formulars zugreifen kannst, kannst Du das auch mit der Variablen direkt machen
           var Name = parent.FrameName.dieVariable;

        Danke fuer den Hinweis - muss ich noch mal testen. Ich meine mich zu erinnern, dass ich es auf diese Weise mal ganz naiv versucht, aber keinen Erfolg damit hatte. Ist das JavaScript-Level-Ganzneu oder geht das auch schon mit Netscape 3.x oder MS IE 3.x?

        Viele Gruesse
          Stefan Muenz

        1. Danke fuer den Hinweis - muss ich noch mal testen. Ich meine mich zu erinnern, dass ich es auf diese Weise mal ganz naiv versucht, aber keinen Erfolg damit hatte. Ist das JavaScript-Level-Ganzneu oder geht das auch schon mit Netscape 3.x oder MS IE 3.x?

          Nein, ist nicht JavaScript-Level-Ganzneu, Navi2 und Navi3 haben ganz sicher kein Problem damit, MSIE3 eigentlich auch nicht (dem ist allerdings nicht immer zu trauen, da gibt es etliche Versionen, die sich irgendwo in der hintersten Stelle nach dem Punkt in der Versionsnummer unterscheiden und z.T. ihre Tuecken haben :-( )
          Allerdings muss man natuerlich sowieso aufpassen, dass die Variablen in dem Moment, in dem man sie braucht, auch wirklich existieren. Also z.B. BODY onload in einem Frame auf Variablen aus dem anderen zugreifen, kann daneben gehen, wenn der andere Frame noch gar nicht vollstaendig geladen ist.
          Sicherheitshalber abfragen, ob existent:
          Z.B. Frameset mit Frame1 und Frame2:
          In Frame1:
             if(parent.Frame1)       /* fuer den Fall, dass wer die Seite einzeln aufruft und nicht im Frame */
                if(parent.Frame1.meine_Variable)          /* existiert sie schon? */
                   meine_zweite_Variable = parent.Frame1.meine_Variable;
                else
                   alert ("Lass Dir halt was einfallen :-)");
          //   ...
          Solche Abfragen sorgen nebenbei auch dafuer, dass es keine Fehlermeldungen gibt, wenn irgendein Browser wider Erwarten Probleme haben sollte.

          Christine

          1. Nein, ist nicht JavaScript-Level-Ganzneu, Navi2 und Navi3 haben ganz sicher kein Problem damit, MSIE3 eigentlich auch nicht (dem ist allerdings nicht immer zu trauen, da gibt es etliche > Allerdings muss man natuerlich sowieso aufpassen, dass die Variablen in dem Moment, in dem man sie braucht, auch wirklich existieren. Also z.B. BODY onload in einem Frame auf Variablen aus dem anderen zugreifen, kann daneben gehen, wenn der andere Frame noch gar nicht vollstaendig geladen ist.

            Sicherheitshalber abfragen, ob existent:

            Das ist auch nicht nötig, wenn die Variablen in der Datei vereinbart werden, die auch das Frameset definiert. So etwa:

            ...
            <script language="javascript">
            var my_var = "was_auch_immer";
            </script>
            </head>
            <FRAMESET ...>
            ...
            </FRAMESET>

            Der Zugriff aus einem der Frames wäre dann mit

            if (parent.my_var) // zur Sicherheit...
               neu_var = parent.my_var;

            zu machen. Dann ist es einfacher, und ein <body onload="..."> in einem der Frames läuft auch garantiert nicht ins Leere.

            Ciao,
            Felix

            1. Sicherheitshalber abfragen, ob existent:
              Das ist auch nicht nötig, wenn die Variablen in der Datei vereinbart werden, die auch das Frameset definiert. So etwa:
              <script language="javascript">
              var my_var = "was_auch_immer";
              </script>
              </head>
              <FRAMESET ...>
              ...
              </FRAMESET>

              Ja, sicher, das geht auch.
              Muss man von Fall zu Fall entscheiden, was geschickter ist.
              Bei der Version muss die Variable aus dem Frame (war die urspruengliche Frage)
              zuerst mal in das uebergeordnete Fenster, das mit dem Frameset.
              Also muss man entweder von dort aus die Variable holen (inkl. Sicherheitsabfragen, ob Frame existiert/Variable vorhanden), oder man uebergibt sie dorthin, allerdings kann auch das ohne jegliche Pruefung, ob vorausgesetztes Frameset drumrum existiert, eine gewisses Risiko sein.
              Was ich eigentlich sagen will:
              Man kommt nicht drumherum, darueber nachzudenken, was so alles passieren koennte.
              Ih wisst doch: So dumm, wie es kommt, kann man oft gar nicht denken. ;-)))

              Christine

  2. Hi nochmal,

    ich möchte aus einem Frame eine Variable in einem anderen Frame auslesen.

    Ich habe es schon mit PARENT.FRAMENAME.DOCUMENT.VARIABLE versucht, aber ich bekomme die Meldung 'Syntax error', wobei der Pfeil auf den Framenamen zeigt.

    Ich habe schon alles gecheckt, auch Groß/Kleinschreibung, mit eckigen Klammern experimentiert, aber ich komme nicht weiter.

    Ciao, Marius

    Das Windows Objekt definiert den Namensraum von JavaScript variablen:

    der korrekte zugriff müsste deswegen so lauten:

    parent.frame[x].variable

    das geht übrigens auch ganz prima mit funktionen. du musst nur unbedingt darauf achten das du erst auf die variable zugreifst wenn sie im anderen fenster schon definiert ist - und das kann manchmal dauern.

    Timo

  3. ich möchte aus einem Frame eine Variable in einem anderen Frame auslesen.
    Ich habe es schon mit PARENT.FRAMENAME.DOCUMENT.VARIABLE versucht, aber ich bekomme die Meldung 'Syntax error', wobei der Pfeil auf den Framenamen zeigt.

    Hast Du das wirklich alles gross geschrieben?
    Das klappt schon mal nicht. JavaScript ist casesensitiv.
    Und lass 'document' weg.

    Christine