Ricco: Daten aus iframe mit Javascript auslesen

Hi Leute, also ich habe zwei html Dateien.
test1.htm und test2.htm:

test1.htm:
<html>
 <head>
  <title>Test</title>
 </head>
 <body>
  <iframe name="myiframe" src="test2.htm">
  </iframe>
 <script type="text/javascript">
 var lod;
 lod=parent.myiframe.document.testform0.testselect0.length;
 </script>
</body>
</html>

test2.htm:
<form name="testform0" action="select.htm">
 <p>
  <select name="testselect0" size="2>
   <option>1</option>
   <option>2</option>
  </select>
 </p>
</form>

Was ich nun gerne möchte, ist an die Länge der Auswahlliste, die in test2.htm ist und die ich in test1.htm per iframe eingebunden habe, per Javascript rankommen.
Doch folgendes scheint nicht zu funktionieren:
parent.myiframe.document.testform0.testselect0.length
bzw. bekomme ich folgenden Fehler:
parent.myiframe.document.testform0 has no properties

  1. Hi,

    parent.myiframe.document.testform0 has no properties

    immer schön logisch dem Aufbau nach abarbeiten:

    1. Du bist mit deinem Skript in einer Seite, zu dir gehört also auf oberster Ebene self oder window, auf der Ebene danach document.
    2. In diesem document ist außer dem Skript noch ein iframe, Name myiframe
    3. Ein iframe ist auch nur ein Fenster, wenn auch einsam und alleine mitten in der Seite. Also hat es wiederum ein document.
    4. In dem document (in dem iframe (in dem document)) ist ein Formular namens testform0
    5. In dem testform0 (in dem document (in dem iframe (in dem document))) ist eine select-box.
      Was sagt uns das?
      document.myiframe.document.testform0.testselect0

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Was sagt uns das?
      document.myiframe.document.testform0.testselect0

      Danke, aber funzt immer noch nicht, jetzt bekomme ich:
      Error: document.myiframe has no properties

      Ciao
        Ricco :)

      1. Lieber ricco,

        Error: document.myiframe has no properties

        Rouven war nicht exakt genug:

        Dein Script steht in einem document, das selbst auch in einem Fenster (oder, von der Betrachtungsweise her geht hier auch "frame") steht. Daher greifst Du am besten über die verfügbaren Frames zu:

        [code lang =javascript]window.frames['myiframe'].document.testform0.testselect0.length[/code]

        Zweite Möglichkeit (ungetestet!) wäre über das DOM den iframe zu refernzieren:

        document.getElementsByName("myiframe")[0].contentWindow.document.testform0.testselect0.length

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Rouven war nicht exakt genug:

          Dein Script steht in einem document, das selbst auch in einem Fenster (oder, von der Betrachtungsweise her geht hier auch "frame") steht. Daher greifst Du am besten über die verfügbaren Frames zu:
          window.frames['myiframe'].document.testform0.testselect0.length

          Zweite Möglichkeit (ungetestet!) wäre über das DOM den iframe zu »» refernzieren:
          document.getElementsByName("myiframe")[0].contentWindow.document.testform0.testselect0.length

          Also, so funzt es leider auch nicht.
          Bekomme den Fehler:
          Error: window.frames.myiframe.document.testform0 has no properties
          bzw.
          Error: document.getElementsByName("myiframe")[0].contentWindow.document.testform0 has no properties

          Scheint also so, als ob JavaScript testform0 nicht als Objekt ansieht, hab' aber keine AHnung warum..

          Ciao
            Ricco :)

          1. Lieber Ricco,

            ich habe auch etwas übersehen. Daher Dein negatives Feedback:

            Also, so funzt es leider auch nicht.
            Bekomme den Fehler:
            Error: window.frames.myiframe.document.testform0 has no properties
            bzw.
            Error: document.getElementsByName("myiframe")[0].contentWindow.document.testform0 has no properties

            Du hast ganz recht, wenn Du schreibst:

            Scheint also so, als ob JavaScript testform0 nicht als Objekt ansieht, hab' aber keine AHnung warum..

            Das warum ist leicht erklärt: Während im iFrame das HTML-Dokument noch lädt, möchte das JavaScript schon Eigenschaften von Elementen wissen, die (weil ja noch am Laden) noch nicht existieren. Man müsste also den Browser dazu kriegen, dass er erst nach derfolgreichem Laden diesen Wert ermittelt. Dazu eignet sich der Eventhandler "onload".

            Mein Voschlag:

            Wandle Dein Script um in eine Funktion, notiere sie im <head> Deiner "Rahmen"-Seite und notiere im <iframe>-Tag den Eventhandler "onload" mit dem Aufruf Deiner Funktion als Attributwert. Das könnte so aussehen:

            test1.htm:  
            <html>  
             <head>  
              <title>Test</title>  
              <script type="text/javascript">  
              wertErmittler = function () {  
                 var lod = window.frames['myiframe'].document.testform0.testselect0.length;  
                 alert("Ermittelte Länge ist " + lod);  
              }  
              </script>  
             </head>  
             <body>  
              <iframe name="myiframe" src="test2.htm" onload="wertErmittler()">  
              </iframe>  
            </body>  
            </html>
            

            test2.htm:

            <form name="testform0" action="select.htm">  
             <p>  
              <select name="testselect0" size="2>  
               <option>1</option>  
               <option>2</option>  
              </select>  
             </p>  
            </form>
            

            Im obigen Beispiel ist in test2.htm ein Syntaxfehler: size="2 hat keine schließenden Anführungszeichen...

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            1. Hi Felix,
              Du bist mein Held, super!
              Endlich funktioniert es :)
              Also, vielen Dank und sorry, wegen dem Doppelposting.

              Ciao
                Ricco :)