J.Kleineist: rekursive Schleife

Hallo,

nachdem ich mich mit dem iframe im iframe so verrannt habe bekomme ich im Augenblick keinen klaren Geanken hin.

Ich suche nunmehr einen Schleifenalgorithmus mit dem ich alle iframe-Namen (.src) einsammeln kann.Anzahl der Elemente,tiefe der Ebenen sind nicht bekannt.

Muster:          iframe                  |        |         |            iframe  iframe   iframe_______            |          |       |        |        |         iframe     iframe    iframe   iframe  iframe                    |    |        |                iframe  iframe   iframe

usw. usw. (bitte keine Diskussionen über den Sinn von iframes, es könnte auch jedes andere Element sein)

Gruß J.Kleineist

  1. Hi,

    rekursiv absteigend, indem du die Verarbeitung in eine Prozedur/Funktion/Methode kapselst, die als Eingabeparameter die aktuelle IFRAME-Quelle (src) bekommt, diese dann auf Vorkommen von IFRAME checkt für jedes Vorkommen erstmal sich selber aufruft (also absteigt) und dann (nach der Rückkehr aus der Funktion) die Nutzdaten auf irgendeine von dir gewünschte Variante verarbeitet.

    Hoffe, das hilft als Denkanstoß :)
    Frank

  2. hi,

    Ich suche nunmehr einen Schleifenalgorithmus mit dem ich alle iframe-Namen (.src) einsammeln kann.

    zugriff auf die iframes würde ich über
    document.getElementsByTagName("iframe")
    versuchen (und diese collection dann per schleife durchlaufen).
    und auf der nächsten ebene ersetzt du document dann halt durch die referenz auf das document im iframe.

    function rekursiere_ueber_iframes(welches_dokument) {
       var iframes = welches_dokument.getElementsByTagName("iframe");

    for(einIframe in iframes) {
          var scrInhalt = einIframe.src;
          rekursiere_ueber_iframes(einIframe.document);
       }
    }

    rekursiere_ueber_iframes(document);

    ungetestet; nur grobe idee.
    setzt natürlich (mindestens) voraus, dass alle dokumente fertig geladen sind, und das die same origin policy nicht verletzt wird.

    gruß,
    wahsaga

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

      zugriff auf die iframes würde ich über
      document.getElementsByTagName("iframe")

      Bei Frames bietet sich ja auch die Frames-Collection an, die auf auch Iframes anwendbar ist.

      Gruß Gernot

    2. hi,

      Ich suche nunmehr einen Schleifenalgorithmus mit dem ich alle iframe-Namen (.src) einsammeln kann.

      zugriff auf die iframes würde ich über
      document.getElementsByTagName("iframe")
      versuchen (und diese collection dann per schleife durchlaufen).
      und auf der nächsten ebene ersetzt du document dann halt durch die referenz auf das document im iframe.

      function rekursiere_ueber_iframes(welches_dokument) {
         var iframes = welches_dokument.getElementsByTagName("iframe");

      for(einIframe in iframes) {
            var scrInhalt = einIframe.src;
            rekursiere_ueber_iframes(einIframe.document);
         }
      }

      rekursiere_ueber_iframes(document);

      ungetestet; nur grobe idee.
      setzt natürlich (mindestens) voraus, dass alle dokumente fertig geladen sind, und das die same origin policy nicht verletzt wird.

      gruß,
      wahsaga

      Danke,

      Es hat noch etwas gebraucht doch so geht es:

      function u_check_frames()
      {function rekursiere_ueber_iframes(xxs)
          {var xs=xxs, iframes, i,nextScrInhalt, einIframe,k,sbase
           iframes = xs.frames;  //cc(iframes)
           sbase=xs
           if(xs.frames[0].frameElement)sbase=xs.frames[0].frameElement.MyPlatz  // gespeicherte document Referenz
           k=0;
           for(einIframe in iframes)
           {if(einIframe.indexOf("u_iframe")!= -1)
             {scrInhalt = sbase.getElementById(einIframe);alert("Frame: "+scrInhalt.src); // u_iframe <=Teil der id
              if( xs.frames[k].frames.length >0)
               {nextScrInhalt=xs.frames[k];
                rekursiere_ueber_iframes(nextScrInhalt);
               }
              ++k;
           }}}

      rekursiere_ueber_iframes(document);
      }
      Gruß J.Kleingeist