L(in)ux: Wartet onload auf den Inhalt eines iframe?

Hallo,

http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onload@title=SelfHTML meint dazu:
onload (beim Laden einer Datei) Tritt ein, wenn eine HTML-Datei geladen wird.

Das an sich ist ja schon falsch. Nicht während des Ladens irgendwann, sondern wenn etwas fertig ist. Aber was?

Ich lade eine Seite und dort hinein in einen iframe eine andere Seite. Wartet das onload der Mutterseite die Fertigmeldung der Tochterseite ab?

Gruß, L(in)ux

  1. Hi there,

    Ich lade eine Seite und dort hinein in einen iframe eine andere Seite. Wartet das onload der Mutterseite die Fertigmeldung der Tochterseite ab?

    Nein. Es gibt keine Tochterseite. Das kann ja irgendeine Ressource sein, warum sollte die eine Fertigmeldung an eine "Mutterseite" geben? Stell' Dir einfach vor, Du lädst zB Google in  einem Iframe in Deiner Seite, dann beantwortet sich Deine Frage von selbst...

    1. Hallo,

      Nein.

      Welche Möglichkeit gibt es dann, umschliessende Seite A und iframe- Seite B zeitlich zu synchronisieren?

      A versucht, den iframe in der Höhe anzupassen. Dafür meldet B seine Höhe an B's Server. Der macht daraus ein Bild mit dieser Höhe und speichert es.

      A liest nun dieses Bild vom "fremden" Server, wertet die Höhe aus und setzt diesen Wert als iframe- Höhe.

      Wenn B verspätet meldet, kann A ein "altes" Bild auswerten. A nun eine Sekunde warten zu lassen, bringt da auch keine Sicherheit.

      Gruß, L(in)ux

      1. Hi there,

        Welche Möglichkeit gibt es dann, umschliessende Seite A und iframe- Seite B zeitlich zu synchronisieren?

        Das hängt davon ab. Wenn die Seite B von Dir kommt, ist das ganze trivial. Dann überprüfst Du in Seite B einfach auch den onload-Event und teilst es dem parent-Frame einfach mit, wenn er ausgelöst wurde, sprich die Seite B vollständig geladen wurde.

        A versucht, den iframe in der Höhe anzupassen. Dafür meldet B seine Höhe an B's Server. Der macht daraus ein Bild mit dieser Höhe und speichert es.
        A liest nun dieses Bild vom "fremden" Server, wertet die Höhe aus und setzt diesen Wert als iframe- Höhe.

        Und warum meldet B seine Höhe nicht einfach an A?

        Wenn B verspätet meldet, kann A ein "altes" Bild auswerten. A nun eine Sekunde warten zu lassen, bringt da auch keine Sicherheit.

        Natürlich nicht. Raten ist beim Programmieren immer eine schlechte "Lösung" und eine Sekunde ist genauso geraten wie eine halbe oder deren zwei. Aber wie gesagt, daß mit dem Bild ist sowieso irgendwie von hinten durchs Auge, wenn es wirklich nur um die Größe des Iframes geht...

        1. Joop,

          Und warum meldet B seine Höhe nicht einfach an A?

          Wie sollte das gehen?

          Du kennst Same-Origin-Policy?

          Ich bin Betreiber der Seite B und biete sie anderen Webseiten zum Integrieren an.

          L(in)ux

          1. Hi there,

            Und warum meldet B seine Höhe nicht einfach an A?

            Wie sollte das gehen?

            Du kennst Same-Origin-Policy?

            Ja, die umgeh ich selbst mehrmals am Tag mit cURL...

            Ich bin Betreiber der Seite B und biete sie anderen Webseiten zum Integrieren an.

            Das hättest Du vielleicht am Rande erwähnen sollen. Ich kann zwar prinzipiell hellsehen, aber ich heb' mir das für wichtige Anlässe auf. In jedem Fall aber kann eine Lösung eigentlich nur Ajax-Einsatz auf beiden Seiten sein, Du musst halt irgendeinen Weg finden sicherzustellen, daß Seite A nur die für sie bestimme Information bekommt...

            1. Moin,

              Ajax-Einsatz auf beiden Seiten sein,

              Na, wegen der Same-Origin-Policy gibt es meines Wissens keine Möglichkeit, über einen "neutralen Dritten" zu kommunizieren.

              Du musst halt irgendeinen Weg finden sicherzustellen, daß Seite A nur die für sie bestimme Information bekommt...

              Ideen? Ich hatte ursprünglich bei jedem Neuladen der Seite A einen zufälligen Dateinamen generiert, unter dem Seite B seine Höhenangabe meldet, B's Server das Bild speichert und Seite A sie wieder abruft. Das führte aber zu irssinig vielen Dateileichen auf Server A. Gut, man könnte die Dateien durchlaufen und alles löschen, was älter ist als ...

              Nun mache ich es so, dass Seite A einmalig einen Dateinamen bekommt und den immer wieder verwendet. Dann habe ich maximal so viele Dateien wie "Kunden", die meine Seite B integrieren.

              Jeder Leser, der Seite A aufruft, veranlasst also, dass die Datei mit demselben Namen von B neu erzeugt wird. Wenn B zu langsam ist, liest A also die alte Datei. Das wollte ich vermeiden.

              Egal, wie man's macht, immer ist ein Haken dabei. Und es gibt wahrscheinlich noch drei, vier oder mehr Lösungen mit Haken. Habe jetzt keinen Bock auf Beschäftgungstherapie ...

              L(in)ux

      2. Welche Möglichkeit gibt es dann, umschliessende Seite A und iframe- Seite B zeitlich zu synchronisieren?

        Da gibt es viele Möglichkeiten. Die einfachste und sinnvollste ist postMessage. Dafür gibt es viele Polyfills.

        https://github.com/oyvindkinsey/easyXDM
        http://benalman.com/projects/jquery-postmessage-plugin/
        http://ternarylabs.github.com/porthole/
        http://vimeo.com/24705559

        Mathias

    2. Wartet das onload der Mutterseite die Fertigmeldung der Tochterseite ab?
      Nein. Es gibt keine Tochterseite. Das kann ja irgendeine Ressource sein, warum sollte die eine Fertigmeldung an eine "Mutterseite" geben?

      Der load-Event wird auch nicht von der Seite im iframe erzeugt, sondern das macht der Browser standardmäßig. Bildern, Plugins, Scripte usw. verzögern den load-Event, daher genauso Iframes.

      http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#the-iframe-element
      »When there is an active parser in the iframe, and when anything in the iframe is delaying the load event of the iframe's browsing context's active document, the iframe must delay the load event of its document.«

      Mathias

  2. Hallo,

    Ich lade eine Seite und dort hinein in einen iframe eine andere Seite. Wartet das onload der Mutterseite die Fertigmeldung der Tochterseite ab?

    Ja.
    Beispiel

    Mathias