banaalo: dynamische IFrames

Hallo

Ich habe wie sicher nicht wenige das Problem das ich einen Iframe in der höhe dynamisch verändern möchte.

die sache muss allerdings in allen "gänigen" browsern klappen, was die ergebnisse recht einschränkt. komplizierte lösungen in php sind  gern willkommen (leicht kommentiert). javascript ist nicht gerade so toll, da durch die neuen ie funktionen etc. oft JS geblockt wird.

das kifflge liegt mal wieder in detail.

es gibt eine hauptseite in der ein iframe definiert ist.

<iframe id="main" ... src="http://www.fremderserver.de"></iframe>

blöderweise habe ich keine möglichkeit den inhalt des iframes an meine bedürfnisse anzupassen. der ist da und immer unterschiedlich hoch.

wie bekomme ich nun die höhe der seite im iframe ausgelesen?
vielen dank schonmal für eure hilfe.

  1. Hi banaalo,

    wie bekomme ich nun die höhe der seite im iframe ausgelesen?

    Mit PHP: Gar nicht.

    Zu dem Zeitpunkt, wo PHP arbeitet, wurde die fremde Seite ja noch gar nicht angefordert, die aktuelle Seite ist ja noch nicht einmal beim Browser angelangt.

    Wenn du so etwas machen willst, müsstest du mit Javascript die Höhe nachträglich anpassen - dazu müsstest du mit Javascript die Höhe der Seite auslesen (das geht, ist vielleicht nicht ganz leicht und braucht ein paar browserspezifische Anpassungen, aber im Prinzip sollte es gehen).

    Allerdings stolperst du an der Stelle schon über das nächste Problem - wenn die Hauptseite von example.org stammt und die im IFrame geladene Seite von andereseite.de, dann hast du keinen Zugriff auf den Inhalt des Iframes, aufgrund der Same-origin Policy.

    Kurz um: Ich sehe da nicht allzu viele Möglichkeiten für dich das zu bewekstelligen. Ich hatte neulich ein ähnliches Problem - ich wollte ein IFrame abwärts scrollen, allerdings stammte die Seite im IFrame auch von einer fremden Seite. Ich habe es dann letztendlich so gelöst, dass ein Proxy-Script vom eigenen Server den Inhalt für das IFrame liefert, aber das sorgt natürlich für erhöhten Traffic und ist für längerfristige Sachen nicht zum empfehlen, zumal du noch das HTML parsen musst und Pfade anpassen musst.

    MfG, Dennis.

    1. hi dennis

      danke für die schnelle antwort.

      das mit php klappt nur wenn man dem php interpreter vorher die daten der fremden seite zur verfügung stellt. ich hatte gehofft so eine art prelod funktion für den fremden content zu finden.

      die probleme und mechanismen dabei sind mir durchaus schon verständlich. der interpreter muss die höhenvariable vor der html codegenerierung auflösen können. bei sowas hilft immer sich zu überlegen wie sowas eigentlich von statten geht.

      der interpreter beginnt mit zeile 1 und endet mit zeile n+1 ;o) (für unsere mathematischen freunde)
      PSEUDO Code:

      ladeFremdeSeitenInfo();
       $fr_h = FremdeSeitenInfo["height"];
        ...
       echo "<iframe heigt='".$fr_h."' src='http://www.fremderserver.de'>"; ....

      die fremde seite ist ein formular das dann immer wieder unterschiedlich lange treffer anzeigt. klar könnte ich sofort loslegen und da was eigenes basteln und die ergebnisse abfangen. blöderweise muss ich das dann mit knapp 20 verschiedenen seiten tun und das passt grad gar nicht in mein zeitplan.

      greetz marco

      1. Hi,

        das mit php klappt nur wenn man dem php interpreter vorher die daten der fremden seite zur verfügung stellt.

        auch dann nicht, denn der PHP-Interpreter ist nicht die Rendering-Engine des Besucher-Browsers.

        ich hatte gehofft so eine art prelod funktion für den fremden content zu finden.

        Preload? Du kannst die fremde Seite laden. Dann kennt Dein Server sie. Natürlich weiß Dein Server dann weder, welchen Content der Fremdserver an den Client des Besuchers schicken wird, noch wie dieser ihn darstellen wird.

        die probleme und mechanismen dabei sind mir durchaus schon verständlich.

        Verzeih, wenn ich Zweifel hege.

        der interpreter muss die höhenvariable vor der html codegenerierung auflösen können.

        Richtig. Er muss eine Information vom Client erhalten, bevor er ihm den Höhenwert schickt, welcher diese Information erst lange nachdem Du ihm den Wert schicken musst erhält. Alles in allem forderst Du ein Zeitparadoxon, das sich gewaschen hat. Ich hörte, Paramout sucht noch Autoren für weitere Folgen von Star Trek, vielleicht möchtest Du Dich ja bewerben.

        bei sowas hilft immer sich zu überlegen wie sowas eigentlich von statten geht.

        Jau.

        ladeFremdeSeitenInfo();

        Soweit kein Problem.

        $fr_h = FremdeSeitenInfo["height"];

        Hierzu brauchst Du schon mal die Antwort des Client, der die fremde Seite dazu bereits vorliegen haben muss. Natürlich erkennst Du sofort, dass Dir die Inhalte der fremden Seite so gar nichts nützen.

        die fremde seite ist ein formular das dann immer wieder unterschiedlich lange treffer anzeigt.

        Die von jedem Client unterschiedlich angezeigt werden.

        klar könnte ich sofort loslegen und da was eigenes basteln und die ergebnisse abfangen. blöderweise muss ich das dann mit knapp 20 verschiedenen seiten tun und das passt grad gar nicht in mein zeitplan.

        Und deswegen verschandelst Du Deine Site lieber mit _Frames_, die Dir noch dazu nichts nützen, sondern gleich zu Beginn Probleme bereiten?

        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. hi,

          Alles in allem forderst Du ein Zeitparadoxon

          <Marty> Hey Doc, Sie meinen eins von den Dingern, die das Universum zerstören ...? </Marty>

          gruß,
          wahsaga

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

    Du hast grundsätzliche Probleme mit Deinem Ansatz. Das <iframe>-Element befindet sich in einem Dokument, was beim ändern der src durch Bedienen eines Links nicht mehr neugeladen wird. Die Dimensionen des Ifames können mit Deinem bisherigen Ansatz also nur dynamisch geändert werden (JavaScript). Aber wer gibt bescheit, daß das Dokument komplett geladen ist? Für gewöhnlich macht man dies mit onLoad - nur hast Du leider keinerlei Einfluß auf das Dokument, um ein solches Attribut zu platzieren und ein Script der übergeordneten Browserinstanz zu starten.

    Es gibt Möglichkeiten dem Herr zu werden. Du wirst aber eine Rederng-Engine, die CSS interpretiert, in PHP bauen müssen. Nur ist das so illusorisch, daß ich Dir nur den Rat geben kann: Nimm es hin, daß Deine Besuche scorllen müssen!

    Gruß aus Berlin!
    eddi

    --
    Frei nach Goethe: ... Ich bin ein Teil jener Kraft die stets das Gute will... ]:þ
  3. Hallöchen,

    Ich habe wie sicher nicht wenige das Problem das ich einen Iframe in der höhe dynamisch verändern möchte.

    so viele dürften es eigentlich nicht sein, die dieses Problem haben, weil sie iframes eher vermeiden.

    javascript ist nicht gerade so toll, da durch die neuen ie funktionen etc. oft JS geblockt wird.

    Das liegt nicht so sehr am IE, sondern vor allem daran, dass Javascript oft von durchgeknallten Webautoren missbraucht wird, um dem Surfer auf den Senkel zu gehen.

    es gibt eine hauptseite in der ein iframe definiert ist.
    [...]
    wie bekomme ich nun die höhe der seite im iframe ausgelesen?
    vielen dank schonmal für eure hilfe.

    Warum überhaupt ein iframe? Das muss doch nun wirklich nicht sein.

    So long,
     Martin

    --
    Wissen erwirbt man, indem man immer das Kleingedruckte sorgfältig liest.
    Erfahrung bekommt man, indem man das nicht tut.