Lithaila: DOM vom <IFRAME>

Hallo,

kennt jemand die JS-Methoden, welche auf ein <IFRAME> anwendbar sind.

[iframe-object].childNodes.length sagt bei mir immer 0, obwohl in dem iframe mindestens eine Tabelle drin ist.

TNX

  1. Hi,

    ich mag mich da täuschen, habs noch nicht ausprobiert, aber der Inhalt des iFrames wird behandelt wie ein eigenes Fenster, er hat ein eigenes document und es gibt zunächst mal keine Möglichkeit dies vom Hauptdokument aus zu erreichen. Du musst die DOM-Befehle also ausgehend vom iFrame-document starten.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi,

      ich mag mich da täuschen, habs noch nicht ausprobiert, aber der Inhalt des iFrames wird behandelt wie ein eigenes Fenster, er hat ein eigenes document und es gibt zunächst mal keine Möglichkeit dies vom Hauptdokument aus zu erreichen. Du musst die DOM-Befehle also ausgehend vom iFrame-document starten.

      Ich habs auch noch nicht benutzt, aber rein vom JS-Aufbau her würde ich sagen:

      Punkt a) Du hast Recht, der iFrame ist ein Frame und damit ein eigenes Window-Objekt

      Punkt b) hier liegst du falsch, der Zugriff auf [iframe-objekt].document und auch auf alle Unterobjekte sollte vom Hauptdokument aus möglich sein.

      Gruß,

      Harlequin

    2. ich mag mich da täuschen, habs noch nicht ausprobiert, aber der Inhalt des iFrames wird behandelt wie ein eigenes Fenster, er hat ein eigenes document und es gibt zunächst mal keine Möglichkeit dies vom Hauptdokument aus zu erreichen. Du musst die DOM-Befehle also ausgehend vom iFrame-document starten.

      Vermutlich noch ein MSIE Nutzer ?

    3. Hi there,

      ich mag mich da täuschen, habs noch nicht ausprobiert, aber der Inhalt des iFrames wird behandelt wie ein eigenes Fenster, er hat ein eigenes document und es gibt zunächst mal keine Möglichkeit dies vom Hauptdokument aus zu erreichen. Du musst die DOM-Befehle also ausgehend vom iFrame-document starten.

      Richtig, Du täuscht Dich...

  2. Hellihello

    [iframe-object].document.childNodes.length könnte vielleicht helfen. In jedem Fall kannst Du das vom Hauptfram aus ansprechen über window.framename.document...;

    frankx

    1. [iframe-object].document.childNodes.length könnte vielleicht helfen. In jedem Fall kannst Du das vom Hauptfram aus ansprechen über window.framename.document...;

      nope, nicht im FF

  3. Hallo...

    function getiFrameDocument(name)
    {
      var erg = null;
      var tfr = document.getElementsByTagName("iframe");
      for (var i = 0; i < tfr.length; i++)
      {
        if (tfr[i].name == name)
          var erg = tfr[i].contentWindow!=undefined?tfr[i].contentWindow.document:tfr[i].document;
      }
      return erg;
    }

    Läuft bei mir unter IE 6.0, Firefox und Opera ohne Probleme

    Gruß, Flash

    1. tfr[i].contentWindow.document

      Das isses, DANKE!

      1. Hellihello

        was ist denn das contentWindow? Bei mir im FF geht:

          
          <button onclick="alert(fenster1.document.getElementById('divid').innerHTML)">iframetest()</button>  
          <iframe name="fenster1" src="iframe-inhalt.htm" width="90%" height="90%"/>  
        
        

        wenn in iframe-inhalt.htm ein <div id="divid">drinnesteckt.

        Warum einfach wenn auch kompliziert oder fehlt mir was?

        Gruß,

        frankx

        1. Firefox und IE haben einen unterschiedlichen Zugriff auf das Dokument im iFrame.

          Nehmt bitte die Function, so wie ich sie geschrieben habe, sie ist browserübergreifend.

          Oder zumindest den Ausdruck:

          var idoc = iFrame.contentWindow!=undefined?iFrame.contentWindow.document:iFrame.document;

          Gruß,
          Flash

          1. Hellihello Flash

            besten Dank für Deine Antwort.

            Firefox und IE haben einen unterschiedlichen Zugriff auf das Dokument im iFrame.

            das kann ich bei FF1.5 und IE6 nicht bestätigen. Beide alerten mir bei o.g. Beispiel das entsprechende innerHTML.

            var idoc = iFrame.contentWindow!=undefined?iFrame.contentWindow.document:iFrame.document;

            heiß: Wenn conentWindow nicht undefined ist, dann sollen sie über contentWindow zugreifen, sonst aber direkt, oder?

            Gruß,

            frankx

    2. function getiFrameDocument(name)
      {
        var erg = null;
        var tfr = document.getElementsByTagName("iframe");
        for (var i = 0; i < tfr.length; i++)
        {
          if (tfr[i].name == name)
            var erg = tfr[i].contentWindow!=undefined?tfr[i].contentWindow.document:tfr[i].document;

      Hm, besteht hier einen Grund, warum man nicht contentDocument verwendet? Es ist immerhin die einzige standardisierte Möglichkeit und sie funktioniert, soweit ich das sehe.

      Firefox und IE haben einen unterschiedlichen Zugriff auf das Dokument im iFrame.

      Naja, beide kennen contentWindow. Genauso Konqueror und Opera. Daher frage ich mich: Welcher Browser braucht braucht .document?

      Mathias

      1. Hi Mathias,

        für welchen Browser ich jetzt diesen Ausnahmefall geschrieben hatte weiß ich auch nicht mehr - kann es der Firefox 1.0 oder der Opera 7.54 gewesen sein ?

        Ich weiß nur, daß es mal da Probleme gab, weswegen ich das so gemacht habe, und ich lasse den Code auch lieber so, weil dann der spezielle Browser in dieser Version mit diesem Code zurechtkommt.

        Gruß, Flash

        1. Hallo,

          für welchen Browser ich jetzt diesen Ausnahmefall geschrieben hatte weiß ich auch nicht mehr - kann es der Firefox 1.0 oder der Opera 7.54 gewesen sein ?

          http://www.mozilla.org/docs/dom/domref/dom_frame_ref5.html sagt »Last modified December 11, 2002«, also denke ich einmal, dass Gecko das schon lange kann.

          Was Opera 7.54 angeht, so hast du Recht, er kennt contentWindow noch nicht. Aber contentDocument.

          Mathias

  4. Hallo Lithaila,

    auf diesen iframe beispielsweise

    <iframe width="100" name="deinFrame" ID="deinFrame" src="test.html"></iframe>

    kannst Du per JS so aus dem Hauptdokument zugreifen.

    frames.deinFrame.document...

    mit

    frames.deinFrame.document.documentElement.outerHTML

    bekommst Du den kompletten HTML String.

    Viele Grüße

    Helmut

  5. Hi,

    [iframe-object].childNodes.length sagt bei mir immer 0,

    wie bitte?! Du hast in Deinem <iframe> _keinen_ Alternativ-Content für den Fall, dass die separate Ressource nicht angezeigt werden kann? Das ist ja krass.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. wie bitte?! Du hast in Deinem <iframe> _keinen_ Alternativ-Content für den Fall, dass die separate Ressource nicht angezeigt werden kann? Das ist ja krass.

      Es handelt sich um einen WYSIWYG-Editor, wenn der Kunde keine Frames kann, kommt er gar nicht so weit.