Anja: Anpassung der Iframe- bzw. Framehöhe an darin geladene Seite

Hallo zusammen,

ich habe folgendes Problem:
ich möchte in einem Browserfenster zwei Arten von Inhalten darstellen. Im oberen Bereich soll von mir festgelegter Inhalt erscheinen und im unteren Bereich soll eine CMS (Content Management System) Seite erscheinen.

Beide Inhalte können unterschiedlich lang sein. Da bietet sich eigentlich ein Iframe, in das ich den CMS-Inhalt lade und dessen Höhe ich "theoretisch" auch der CMS-Seite anpassen kann an.

Leider befindet sich die CMS-Seite auf einem eigenen Server, da auch andere Anwendungen darauf zugreifen. Daher kann ich nicht auf die Höhe des body-Tags der CMS Seite zugreifen (um Höhe des Iframes zu ändern) wegen des "cross site scripting" Schutz-Mechanismus.

Eine Alternative wäre evtl. ein Frameset zu basteln und die beiden Seiten in die einzelnen Frames zu laden. Leider habe ich nun das Problem, dass ich die Höhe des oberen Frames nicht dynamisch anpassen kann. Ist es möglich, nachdem ich die Höhe des body-tags der oberen Seite kenne, auf die Frameset-Datei zuzugreifen und nachträglich den rowspan des oberen Frames (quasi die Höhe) zu ändern?

Falls das auch nicht möglich sein sollte kann ich bei der Iframe-Lösung evtl. in der CMS Seite eine JavaScript Variable hinterlegen die die Höhe enthält? Ich habe die Möglichkeit die CMS Seite selber zu gestalten.

Weitere Tipps sind herzlich willkommen.

Im Voraus besten Dank
Gruss

Anja

  1. Hallo Anja,

    Eine Alternative wäre evtl. ein Frameset zu basteln und die beiden Seiten in die einzelnen Frames zu laden. Leider habe ich nun das Problem, dass ich die Höhe des oberen Frames nicht dynamisch anpassen kann. Ist es möglich, nachdem ich die Höhe des body-tags der oberen Seite kenne, auf die Frameset-Datei zuzugreifen und nachträglich den rowspan des oberen Frames (quasi die Höhe) zu ändern?

    Ja das halte ich im Prinzip für möglich, aber für keine schöne Lösung. Du könntest dein Frameset erst einmal mit Default-Werten in der Höhenaufteilung laden. Dann würdest du mit dem onLoad-Event in allen Browsern außer dem IE die innerHeight bzw für IE document.body.clientHeight des oberen Frames auslesen, und den parent, also das Frameset mit diesem Wert als Search-String neu aufrufen. Per document.write() würdest du dort dann die Höhe des oberen Frames dynamisch schreiben.

    Willst du den Aufwand wirklich treiben? Außerdem ist es auch für den Nutzer nicht schön, wenn die Seite dann immer zweimal komplett neu geladen wird.

    Gruß Gernot

    1. Hallo Gernot,

      danke für Deine Antwort.

      Willst du den Aufwand wirklich treiben? Außerdem ist es auch für den Nutzer nicht schön, wenn die Seite dann immer zweimal komplett neu geladen wird.

      Du hast recht. Wenn die Seite dann zwei mal geladen wird ist es nicht wirklich schön für den Anwender.
      Ich dachte, das kann man vielleicht so machen, dass die Seite nicht zwei mal geladen wird sondern, dass im nachhinein nur die Framegrösse geändert wird (praktisch wie beim Iframe).

      Wie könnte man dieses Problem sonst lösen?
      Gruß Anja

      1. Hallo Anja,

        Ich dachte, das kann man vielleicht so machen, dass die Seite nicht zwei mal geladen wird sondern, dass im nachhinein nur die Framegrösse geändert wird (praktisch wie beim Iframe).

        ja, mit Innerframe könntest du es vielleicht mal probieren, indem du ihn mit 100% Höhe in ein DIV-Element packst, dass du dann nachtäglich in der Höhe änderst, aber ob das funktioniert? Probier´s mal aus, das würde mich auch interessieren.

        Gruß Gernot

        1. Hallo Gernot

          ja, mit Innerframe könntest du es vielleicht mal probieren, indem du ihn mit 100% Höhe in ein DIV-Element packst, dass du dann nachtäglich in der Höhe änderst, aber ob das funktioniert? Probier´s mal aus, das würde mich auch interessieren.

          Ja, könnte ich machen, aber ich weiss ja nicht wie hoch ich das Div-Element nachträglich machen soll da ich auf die Höhe des body-Elementes der geladenen Seite nicht zugreifen kann.

          Gruß Gernot

          1. Hallo Anja

            stimmt, ich vergaß. Dasselbe Problem hättest du aber auch bei der unschönen (zweimal ladenden) Framelösung gehabt. Tja ich glaube das wird dann halt alles nichts.

            Gruß Gernot

            1. Ich habe inzwischen eine Lösung gefunden:

              ich verwende zwei Frames. Im ersten Frame befindet sich meine Seite. Von dieser Seite kann ich die Höhe des Inhaltes auslesen (Der Inhalt befindet sich in einem Div-Tag).

              Wenn ich die Höhe hab kann ich nachträglich in der frameset-Datei die Höhe des oberen Frames anpassen.

              Das Anpassen funktioniert wenn ich über setAttribute('rows', '200, *') dem Frameset-Tag die Höhe nachträglich (statisch) setze. Allerdings habe ich ein Problem wenn ich die Höhe als Variable übergeben möchte. In der Variablen befindet sich die Höhe aus dem ersten Fensterinhalt.

              Muss ich noch ein wenig rumspielen

              Gruss
              Anja