Tina: Prüfen ob ein Iframe geladen wurde

Hallo zusammen,

ich habe auf einer Seite ein Iframe und einige Links. Wenn ich auf einen Link klicke, wird die neue Seite im Iframe angezeigt und eine JavaScript funktion aufgerufen die sich auf der 'Hauptseite' befindet.

Wie kann ich nun in dieser Funktion prüfen ob das Iframe fertig geladen wurde?
Geht das überhaupt?

Vielen Dank im Voraus.
Grüssle

Tina.

  1. Hallo nochmal,

    ein kleiner Nachtrag noch: wenn man auf den Link klickt, wird eine JavaScript funktion aufgerufen. In dieser wird dann über .replace() der neue URL im Iframe geladen.

    Nachdem das Iframe geladen ist soll es noch in der Höhe angepasst werden. Dafür muss ich wissen ob das Iframe fertig geladen ist.

    1. Hallo Tina!

      ein kleiner Nachtrag noch: wenn man auf den Link klickt, wird eine JavaScript funktion aufgerufen. In dieser wird dann über .replace() der neue URL im Iframe geladen.

      Warum so kompliziert? Warum nicht als Link mit Target-Angabe?

      Außerdem: Was machst Du, wenn der User kein JavaScript hat?

      Nachdem das Iframe geladen ist soll es noch in der Höhe angepasst werden. Dafür muss ich wissen ob das Iframe fertig geladen ist.

      Du denkst von der falschen Seite, denke ich.
      Die IFrame-Seite hat ein onload="fensterAnpassen()" oder ein onload="parent.fensterAnpassen()" und wird von sich aus aktiv, wenn es soweit ist.

      gruß
      Sven

      1. Hallo Sven,

        Warum so kompliziert? Warum nicht als Link mit Target-Angabe?

        Wäre möglich, aber ich muss ja noch die Höhe des Iframes anpassen. Dazu müsste ich eine JavaScript Funktion aufrufen.

        Außerdem: Was machst Du, wenn der User kein JavaScript hat?

        Diese Frage stellt sich in diesem Fall nicht.

        Du denkst von der falschen Seite, denke ich.
        Die IFrame-Seite hat ein onload="fensterAnpassen()" oder ein onload="parent.fensterAnpassen()" und wird von sich aus aktiv, wenn es soweit ist.

        Ja, aber der IE5.0 kennt das onLoad Event bei Irames nicht.

        1. Hi!

          Wäre möglich, aber ich muss ja noch die Höhe des Iframes anpassen. Dazu müsste ich eine JavaScript Funktion aufrufen.

          Falsch!

          Außerdem: Was machst Du, wenn der User kein JavaScript hat?

          Diese Frage stellt sich in diesem Fall nicht.

          Ähm. Der gute drückt auf den Link, nix passiert und er denkt sich scheiß Seite?

          Ja, aber der IE5.0 kennt das onLoad Event bei Irames nicht.

          Da liegt Dein Denkfehler! Das onload soll ja auch in den Body-Tag des Iframes und nicht in den IFrame-Tage des Elternfensters!

          gruß
          Sven

          1. Hi!

            Wäre möglich, aber ich muss ja noch die Höhe des Iframes anpassen. Dazu müsste ich eine JavaScript Funktion aufrufen.

            Falsch!

            Wie soll ich denn sonst die Höhe des Iframes ändern wenn ich nicht auf eine JavaScript Funktion zugreife?»»

            Ja, aber der IE5.0 kennt das onLoad Event bei Irames nicht.

            Da liegt Dein Denkfehler! Das onload soll ja auch in den Body-Tag des Iframes und nicht in den IFrame-Tage des Elternfensters!

            Gute Idee. Wie kann ich dann aus dem onload im body-tag der Datei des Iframes die Höhe des umgebenen Iframes setzen?
            Weiss die Datei in welchem Iframe sie sich befindet?
            Ich habe nämlich auf der Seite mehrere Iframes.

            gruß
            Sven

            1. Hi!

              Wie soll ich denn sonst die Höhe des Iframes ändern wenn ich nicht auf eine JavaScript Funktion zugreife?»»

              Da hab ich nicht genau genug gelesen. Klar brauchst Du JS, aber Du brauchst es nicht, um die Seite aufzurufen!

              Gute Idee. Wie kann ich dann aus dem onload im body-tag der Datei des Iframes die Höhe des umgebenen Iframes setzen?

              Kenn mi nimma aus. Wer beeinflusst wen? Das Dokument im IFrame die Größe des Elternfensters oder seine eigene?

              Weiss die Datei in welchem Iframe sie sich befindet?

              Sehe in beide Richtungen kein Problem:

              Entweder das Elternfenster übernimmt die Arbeit, dann gibst Du eine Referenz an dessen Funktion mit:

              onload="parent.anpassen( window )"

              oder Du kannst ja auch vom Dokument im IFrame auf das darüberliegende Elternfanster zugreifen (siehe parent)

              Ich habe nämlich auf der Seite mehrere Iframes.

              klingt nicht gut.
              was gut ist, ist nämlich zumeist einfach!

              Probier mich auch oft an verrückt komplizierten Dingen, aber schlussendlich hab ichs meist bereut *g*

              gruß
              sven

              1. Hi,

                Kenn mi nimma aus. Wer beeinflusst wen? Das Dokument im IFrame die Größe des Elternfensters oder seine eigene?

                Das Dokument im Iframe soll im onload die Höhe des Iframes ändern.

                Weiss die Datei in welchem Iframe sie sich befindet?

                Sehe in beide Richtungen kein Problem:

                Entweder das Elternfenster übernimmt die Arbeit, dann gibst Du eine Referenz an dessen Funktion mit:

                onload="parent.anpassen( window )"

                Ok, ich habe zuerst mal versucht im onload des Dokumentes innerhalb des Iframes ein alert(window.innerHeight) oder auch alert(window.outerHeight) auszugeben, also die aktuelle Höhe des Iframes.
                Das klappt aber nicht, da wird immer 'undefined' ausgegeben. Wie kann ich also auf die Höhe des Iframes zugreifen?

                Gruss
                Tina

                1. Winkewinke!

                  Ok, ich habe zuerst mal versucht im onload des Dokumentes innerhalb des Iframes ein alert(window.innerHeight) oder auch alert(window.outerHeight) auszugeben, also die aktuelle Höhe des Iframes.

                  Sehe ich da etwas falsch:
                  onload="alert(parent.getElementById('ID_des_IFRAME').style.width)"

                  So hätte ich es jedenfalls einmal probiert.

                  gruß
                  Sven

                  1. hi,

                    [...] also die aktuelle Höhe des Iframes.

                    Sehe ich da etwas falsch:

                    ja.

                    onload="alert(parent.getElementById('ID_des_IFRAME').style.width)"

                    einen computed style kannst du über das style-objekt nicht ermitteln.

                    document.offsetHeight sollte weiterhelfen.
                    (oder evtl. auch offsetHeight von body.)

                    gruß,
                    wahsaga

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

                      document.offsetHeight sollte weiterhelfen.
                      (oder evtl. auch offsetHeight von body.)

                      gruß,
                      wahsaga

                      Ich habe es folgendermassen probiert:

                      Dokument im Iframe:

                      <body onload="window.resizeTo(528,offsetHeight von body);">

                      Im IE funktionierts, aber im Firefox nicht (selbst wenn ich an resizeTo() feste Werte übergebe.

                      Woran könnte das liegen?

                      Grüssle
                      Tina

                      1. hi,

                        Ich habe es folgendermassen probiert:

                        Dokument im Iframe:
                        <body onload="window.resizeTo(528,offsetHeight von body);">

                        Im IE funktionierts, aber im Firefox nicht (selbst wenn ich an resizeTo() feste Werte übergebe.

                        Woran könnte das liegen?

                        dass man die größe eines iframes nicht einfach ändern kann, als ob er ein freistehendes fenster wäre, erscheint mir doch sehr einleuchtent.
                        schließlich ist der iframe im hauptdokument mit bestimmten maßen definiert worden.

                        mal eine andere frage - wozu überhaupt das ganze?

                        größe des iframes anpassen vermutlich deshalb, weil du keinen scrollbalken für das darin geladene dokument haben willst? hauptseite soll also auch mit größer werden?

                        sorry, das erscheint mir großer murks zu sein - es ist eine vergewaltigung der beteiligten techniken.

                        du willst offenbar eigentlich ein layout hinkriegen, so wie es ohne frames und iframes aussehen würde (?) - ja dann verzichte doch einfach auf frames und iframes!

                        (nein, dass sie das erstellen der seiten für dich vereinfachen, ist kein argument - zumal das ja, wie an diesem thread zu sehen, schon gar nicht mehr zutrifft.
                        serverseitige include-techniken, oder editoren mit include-funktion exisiteren, also nutze auch etwas in der art, anstatt dir für eine verkrüppelte lösung, die doch nur unter bestimmten umständen überhaupt funktionieren kann, einen abzubrechen.)

                        gruß,
                        wahsaga

                        --
                        /voodoo.css:
                        #GeorgeWBush { position:absolute; bottom:-6ft; }
                        1. Nun ja,
                          ich würde es ja gerne machen. Allerdings werden die statischen Seiten die in dem Iframe geladen werden sollen aus einer Mediendatenbank geliefert. Da habe ich leider keinen Einfluß darauf.

                          Es sind sogar fünf Iframes pro Seite, da fünf Produkte pro Seite angezeigt werden.

                          Nun zu meiner Frage zurück:

                          gibt es nun keine Möglichkeit das ganze auch im Firefox zum laufen zu bringen? Immerhin unterstützt Firefox window.resize();

                          Danke

                          Gruss
                          Tina

                          1. hi,

                            Allerdings werden die statischen Seiten die in dem Iframe geladen werden sollen aus einer Mediendatenbank geliefert. Da habe ich leider keinen Einfluß darauf.
                            Es sind sogar fünf Iframes pro Seite, da fünf Produkte pro Seite angezeigt werden.

                            wer trifft denn die entscheidung, solch eine zusammengestückelte lösung überhaupt zu realisieren ...?

                            gibt es nun keine Möglichkeit das ganze auch im Firefox zum laufen zu bringen? Immerhin unterstützt Firefox window.resize();

                            vielleicht gibt es die - wenn dann aber eher nicht über window.resize, sondern über änderung der attribute des iframe-elementes im hauptdokument.

                            gruß,
                            wahsaga

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

                      einen computed style kannst du über das style-objekt nicht ermitteln.

                      Meinst Du das generell?
                      Das wäre falsch!

                      Ehrlich gesagt gehe ich davon aus, dass dieser Wert im Style-Tag gesetzt ist. Hätte ich vielleicht dazu schreiben sollen 8(

                      gruß
                      Sven

                      1. hi,

                        einen computed style kannst du über das style-objekt nicht ermitteln.

                        Meinst Du das generell?
                        Das wäre falsch!

                        ja? warum?

                        Ehrlich gesagt gehe ich davon aus, dass dieser Wert im Style-Tag gesetzt ist. Hätte ich vielleicht dazu schreiben sollen 8(

                        weißt du, was man als "computed style" bezeichnet?

                        gruß,
                        wahsaga

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

                          hi,

                          einen computed style kannst du über das style-objekt nicht ermitteln.

                          Meinst Du das generell?
                          Das wäre falsch!

                          ja? warum?

                          Streng genommen muss ich mich korrigieren. Über das Style-Objekt geht es nicht!

                          Aber im IE hast Du zu jedem Element das Objekt currentStyle und runtimeStyle, das genauso aufgebaut ist und wesentlich mehr kann. Weil Du eben auch auf font-size etc. zugreifen kannst.

                          Hilft natürlich nicht unserer Freundin (nur IE), deshalb habe ich es auch nicht weiter erwähnt.

                          Ehrlich gesagt gehe ich davon aus, dass dieser Wert im Style-Tag gesetzt ist. Hätte ich vielleicht dazu schreiben sollen 8(

                          weißt du, was man als "computed style" bezeichnet?

                          Naja, ich glaube es.

                          Du meinst die Werte zur Laufzeit, nicht?

                          gruß Sven