bert: Zugriff über mehrere Frames

Hallo zusammen,

Ich möchte über ein Frameset auf eine ander seite zugreife und entweder ein Element in der Seite verändern oder die Seite neu laden.

So sieth mein Frameset aus:

<html>
 <head>
  <title>Frame2</title>
 </head>
 <frameset rows="*" cols="200,*" border="0" frameborder="1" framespacing="0"  >
  <frame id="FrameLeft" name="treeframe" src="FrameLeft.htm"/>
  <frameset rows="160,*" border="0" frameborder="1">
    <frame id="FrameTop" name="FrameTop" src="FrameTop.htm">
    <frame id="FrameMain" name="basefrm" src="FrameMain.htm" />
   </frameset>
  <frame id="FrameLeft" name="treeframe2" src="FrameLeft.html" />
   <noframes>
   <body></body>
  </noframes>
 </frameset>
 <body></body>
</html>

Inhalt der Seite "FrameLeft":

<html>
 <head>
  <script>
  function myLeftF( wert)
  {
   document.getElementById('myS').style.backgroundColor = 'red';
   document.getElementById('myS').innerHTML = wert;
  }
  </script>
 </head>
 <body>
 <span id="myS">FrameLeft</span>
 </body>
</html>

Aus der Dateien "FrameMain" versuche ich auf die Datei "FrameLeft.htm" zuzugreifen mit folgende Funktion:

function myFunktion(){
 top.treeframe2.myLeftF( 'test_1' );
 parent.treeframe2.myLeftF( 'test_2' );
}

Beispiel habe ich von der Seite:

http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/#beispiel

Genommen
Beim ausführen der Funktion bekomme ich immer Fehler:

parent.treeframe2.myLeftF is not a function
top.treeframe2.myLeftF is not a function

Laut dem Beispiel aus der oben genanntem Link müsste der Zugriff zumindesetens über "top" funktionieren, tut aber nicht.
Was mache ich falsch?
Wie kann ich auf die Funktion "myLeftF" zugreifen?

Grüße bert

  1. hi,

    Ich möchte über ein Frameset auf eine ander seite zugreife und entweder ein Element in der Seite verändern oder die Seite neu laden.

    Und wie so gut wie jeder andere Framebastler verhedderst du dich dabei - möchtest aber vermutlich immer noch die Behauptung aufrecht erhalten, Frames seien "so schön einfach" zum Designen ...?

    Beim ausführen der Funktion bekomme ich immer Fehler:

    parent.treeframe2.myLeftF is not a function
    top.treeframe2.myLeftF is not a function

    Dass parent nicht funktioniert, sollte beim vorliegenden Aufbau logisch sein.

    top "sollte eigentlich" funktionieren.

    Die Fehlermeldungen klingen nach dem IE - was sagen die Javascript-Konsolen richtiger Browser dazu?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      Und wie so gut wie jeder andere Framebastler verhedderst du dich dabei - möchtest aber vermutlich immer noch die Behauptung aufrecht erhalten, Frames seien "so schön einfach" zum Designen ...?

      hm, eigentlich das Designe ist mir in erste Line nicht so wichtig, es geht um die Funktionalität.

      top "sollte eigentlich" funktionieren.

      Die Fehlermeldungen klingen nach dem IE - was sagen die Javascript-Konsolen richtiger Browser dazu?

      Der richtige Browser (Firefox 2.0.0.1) sagt das in der Konsole, verwede dafür www.getfirebug.com/contribute.html?product

      grüße bert

      1. hi,

        hm, eigentlich das Designe ist mir in erste Line nicht so wichtig, es geht um die Funktionalität.

        Die ist ja zusammen mit der Nutzbarkeit noch ein weiterer Grund, noch mehr Abstand von Frames zu nehmen.

        Der richtige Browser (Firefox 2.0.0.1) sagt das in der Konsole

        Hmkay ... dann beseitige doch erst mal den Fehler der doppelt vergebenen ID,
        und dann versuche den Zugriff mal mit der Syntax aus http://de.selfhtml.org/javascript/objekte/frames.htm#allgemeines, Schema 1. (Auch da lassen sich die Framenamen in den eckigen Klammern angeben. Nur auf grund von name- oder id-Attributen den globalen Scope mit Objekten zu versauen, diese Unart des IE hat sich der Firefox noch nicht angewöhnt.)

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. hallo,

          Hmkay ... dann beseitige doch erst mal den Fehler der doppelt vergebenen ID,
          und dann versuche den Zugriff mal mit der Syntax aus http://de.selfhtml.org/javascript/objekte/frames.htm#allgemeines, Schema 1. (Auch da lassen sich die Framenamen in den eckigen Klammern angeben. Nur auf grund von name- oder id-Attributen den globalen Scope mit Objekten zu versauen, diese Unart des IE hat sich der Firefox noch nicht angewöhnt.)

          habe versucht, ohne größeren Erfolg mit folgenden Varianten:

          parent.frames['treeframe2'].myLeftF( 'test_1' );
          top.frames['treeframe2'].myLeftF( 'test_1' );
          parent.frames[ treeframe2 ].myLeftF( 'test_1' );
          parent.frames[ "treeframe2" ].myLeftF( 'test_1' );

          Fehler Meldung:

          • parent.frames.treeframe2.myLeftF is not a function
            myFunktion()FrameMain.htm (line 47)
            onload(load )FrameMain.htm (line 1)
            [Break on this error] parent.frames[ "treeframe2" ].myLeftF( 'test_1' );

          • parent.frames.treeframe2.myLeftF is not a function
            myFunktion()FrameMain.htm (line 44)
            onclick(click clientX=0, clientY=0)FrameMain.htm (line 1)
            [Break on this error] parent.frames['treeframe2'].myLeftF( 'test_1' );

          Der Frameset sieht so aus:

          <html>
           <head>
            <title>Frame2</title>
           </head>
           <frameset rows="*" cols="200,*" border="1" frameborder="1" framespacing="0"  >
            <frame name="treeframe" src="FrameLeft.htm"/>
            <frameset rows="160,*" border="0" frameborder="1">
              <frame name="FrameTop" src="FrameTop.htm">
              <frame name="basefrm" src="FrameMain.htm" />
             </frameset>
            <frame name="treeframe2" src="FrameLeft.html" />
             <noframes>
             <body></body>
            </noframes>
           </frameset>
           <body></body>
          </html>

          grüße bert

          1. hi,

            Fehler Meldung:

            • parent.frames.treeframe2.myLeftF is not a function
              myFunktion()FrameMain.htm (line 47)
              onload(load )FrameMain.htm (line 1)

            OK, onload macht stutzig - hast du denn überhaupt sichergestellt, dass die Funktion in dem Frame zu dem Zeitpunkt, wo du sie aufzurufen versuchst, bereits existiert?

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. hallo,

              Fehler Meldung:

              • parent.frames.treeframe2.myLeftF is not a function
                myFunktion()FrameMain.htm (line 47)
                onload(load )FrameMain.htm (line 1)

              OK, onload macht stutzig - hast du denn überhaupt sichergestellt, dass die Funktion in dem Frame zu dem Zeitpunkt, wo du sie aufzurufen versuchst, bereits existiert?

              OK, onload habe ich entfernt.
              Die Fehlermeldung bleibt?

              top.treeframe2.myLeftF is not a function
              myFunktion()FrameMain.htm (line 40)
              onclick(click clientX=0, clientY=0)FrameMain.htm (line 1)
              [Break on this error] top.treeframe2.myLeftF( 'test_1' );

              parent.parent.treeframe2.myLeftF is not a function
              myFunktion()FrameMain.htm (line 41)
              onclick(click clientX=0, clientY=0)FrameMain.htm (line 1)
              [Break on this error] parent.parent.treeframe2.myLeftF('test_1');

              Also wo liegt der Fehler eurer Meinung nach?

              grüße bert

              1. hi,

                OK, onload macht stutzig - hast du denn überhaupt sichergestellt, dass die Funktion in dem Frame zu dem Zeitpunkt, wo du sie aufzurufen versuchst, bereits existiert?

                OK, onload habe ich entfernt.
                Die Fehlermeldung bleibt?

                Ist das eine Frage?

                Übrigens hatte ich dir explizit eine Frage gestellt - auf die wieder mal nicht eingegangen wird.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. Hallo,

                  OK, onload macht stutzig - hast du denn überhaupt sichergestellt, dass die Funktion in dem Frame zu dem Zeitpunkt, wo du sie aufzurufen versuchst, bereits existiert?

                  Übrigens hatte ich dir explizit eine Frage gestellt - auf die wieder mal nicht eingegangen wird.

                  Also, an Anfang habe ich die Funktion auszuführen sofort beim lande der Seite, um mir etwas Zeit zu sparen, war keine gute Idee, jetzt mache ich das über ein Button.
                  Aus meine Sicht müsste die Funktion schon da sein, denn es handelt sich nur um html Dateien, die alle in einem Verzeichnis sich befinden und beim laden keine Verzügerung von meiner Seite vorhanden ist.

                  OK, onload habe ich entfernt.
                  Die Fehlermeldung bleibt?

                  Ist das eine Frage?

                  Eher eine Feststellung, denn ich habe alles gemacht wie im oben von mir gennantem Bsp. Beschrieben worden ist, aber leider erziele ich kein positiven Ergebnis, an dieser Stelle bin ich jetzt zimmlich Ratlos.

                  Grüße bert

          2. Hallo,

            von Framemain.htm aus gesehen ist wohl eher

            parent.parent.treeframe2 ansprechbar

            top.treeframe2 sollte aber auch funktionieren

            Gruß plan_B

  2. Hallo,

    dann versuche ich nochmal dein Frameset nachzubauen ...

    So sieth mein Frameset aus:

    <html>
    <head>
      <title>Frame2</title>
    </head>
    <frameset rows="*" cols="200,*" border="0" frameborder="1" framespacing="0"  >
      <frame id="FrameLeft" name="treeframe" src="FrameLeft.htm"/>
      <frameset rows="160,*" border="0" frameborder="1">
        <frame id="FrameTop" name="FrameTop" src="FrameTop.htm">
        <frame id="FrameMain" name="basefrm" src="FrameMain.htm" />
       </frameset>
      <frame id="FrameLeft" name="treeframe2" src="FrameLeft.html" />
       <noframes>
       <body></body>
      </noframes>
    </frameset>
    <body></body>
    </html>

    jetzt hiermit, (die armen Browser ;) )
    <html>
     <head>
      <title>Frame2</title>
     </head>
     <frameset rows="*" cols="200,*" border="1" frameborder="1" framespacing="5"  >
      <frame  name="treeframe" src="test1.htm"/>
      <frameset rows="160,*" border="0" frameborder="1">
        <frame name="FrameTop" src="test1.htm">
        <frame name="basefrm" src="test1.htm" />
       </frameset>
      <frame name="treeframe2" src="test1.htm" />
       <noframes>
       <body></body>
      </noframes>
     </frameset>
     <body></body>
    </html>

    und test1.htm

    <html>
     <head>
      <script>
      function myLeftF( wert)
      {
       document.getElementById('myS').style.backgroundColor = 'red';
       document.getElementById('myS').innerHTML = wert;
      }
      </script>
     </head>
     <body>

    <script type=text/javascript>
    document.write("<h1>"+self.name+"</h1>"+"<p>parent.length: "+parent.length);
    </script>

    </body>
    </html>

    in jedem Framefenster soll der Name ausgegeben werden. Ich sehe nur 3 Fenster, wo ist "treeframe2" ?

    Gruß plan_B

    1. https://forum.selfhtml.org/?t=145567&m=944977

      ..., aber leider erziele ich kein positiven Ergebnis, an dieser Stelle bin ich jetzt ziemlich Ratlos.

      ... hoffe doch mal nich ¿?