treziman: frames, iframes oder divs?

Hallo,

melde mich mal in einer anderen Rubrik :-)

Vorbemerkung: natürlich habe ich zu diesem Thema erstmal gegoogelt, aber auf meine spezielle Frage keine Antwort gefunden. Ausserdem kann es hilfreich sein, auch andere Meinungen zu lesen. Die Frage nehme ich mal vorweg und erläutere danach.

Kann man einen <div id ="xyz">-Bereich gezielt über einen Link ähnlich bei Ankern, also mittels <a href....target...> ansteuern?

Die Problematik: Ich habe ein Seitenlayout mit 6 frames gestaltet. Oben 2 frames gleicher Höhe nebeneinander, Mitte 3 frames und unten 1 frame, welches u.a. einen Link zum Impressum enthält. Zur Verdeutlichung:

******************************************************************
*    f1 (Label)                *     f2 (Ortsangabe)             *
******************************************************************
*       *                                               *        *
*       *                                               *        *
*       *                                               *        *
* f3    *                   f4 (main)                   *  f5    *
*(navi) *                                               *(status)*
*       *                                               *        *
*       *                                               *        *
*       *                                               *        *
******************************************************************
*                       f6 (Impressum etc.)                      *
******************************************************************

Die frames f1 und f6 haben immer denselben Inhalt. Der Inhalt von f3 und f5 ändert sich nach dem Login, f4 ständig und f2 nur, wenn man einen anderen Bereich der Website betritt. PHP machts möglich.
Wenn sich nun jemand eingeloggt hat, kann er Seiten erreichen, die man 'von aussen' sonst nicht erreichen kann. Und wenn er dann einen Favoriten-Link oder Bookmark setzt und diesen am nächsten Tag wieder aufruft, landet er genau wieder an diesem Punkt. Im script kann ich das abfangen und ihn dann auf eine Seite weiterleiten, wo z.B. das Login wäre. Nur haben die Frames 2,3 und 5 dann immernoch den 'eingefrorenen' Zustand des Zeitpunkts, als der Bookmark gesetzt wurde. Also Inhalte, die man erst nach dem Login sehen darf. Das darf nicht sein! Verweise ich mittels header ("location: index.php"); , wird das frameset erneut im frame f4 ausgeführt, was total durcheinander aussieht. header ("window-target: _top (oder parent)") funktioniert nicht, bzw. nicht so wie gewollt. Es nützt nichts, wenn sich ein neues Browserfenster öffnet, solange das alte bleibt.

Ich bin im Projekt noch nicht soweit fortgeschritten, dass ich eine Änderung auf iframes oder divs problemlos machen kann. Hierbei ist aber wieder z.B. das frame f5 ein Problem. Nach dem Login wird dort u.a. angezeigt, wieviele User online sind und deren Nicknamen. Es gibt dort auch einen Link, der dasselbe script aufruft und die Anzeige aktualisiert. Dabei wird auch nur der Inhalt des frames f5 verändert.
Ich bin nicht zwangsläufig auf frames fixiert oder ein Fan von ihnen, aber es lässt sich sehr leicht damit umgehen.
Etwas in einem iframe aufrufen geht ja problemlos, aber geht das auch bei divs?

Gruss
Thorsten

  1. Hi,

    Kann man einen <div id ="xyz">-Bereich gezielt über einen Link ähnlich bei Ankern, also mittels <a href....target...> ansteuern?

    nein - das ist einer ihrer wesentlichen Vorteile. Jede Seite, also jede URL, ist unabhängig jedweder Historie komplett. Austauschspielereien mittels AJAX haben, genau wie Frames, erhebliche Nachteile, die nur mit komplexen und aufwändigen Konzepten umgangen werden können; ein wesentlicher Punkt dieser Konzepte ist, dass es für jeden Zustand der Seite wieder eine URL gibt, die sie komplett enthält, auch wenn der Client kein JavaScript verwenden möchte.

    Die Problematik: Ich habe ein Seitenlayout mit 6 frames gestaltet.

    Ja, das ist ein Fehler im Basiskonzept. Trenne Dich zunächst von allen Gedankengängen, die zu dieser "Lösung" geführt haben, beispielsweise davon, dass es sinnvoll sei, kleine, gleichbleibende Bereiche nur einmal zu laden.

    Die frames f1 und f6 haben immer denselben Inhalt. Der Inhalt von f3 und f5 ändert sich nach dem Login, f4 ständig und f2 nur, wenn man einen anderen Bereich der Website betritt. PHP machts möglich.

    Und ein Client, der Frames ansteuert bzw. verwaltet, nehme ich an. Funktioniert das ganze auch ohne JavaScript oder ohne visuelle Darstellung (Screenreader, Suchmaschinen-Robots)?

    ("location: index.php");

    Der Location-Header verlangt eine absolute URL.

    header ("window-target: _top (oder parent)") funktioniert nicht,

    Nein, HTTP kennt keine Fenster.

    Ich bin im Projekt noch nicht soweit fortgeschritten, dass ich eine Änderung auf iframes oder divs problemlos machen kann.

    Von Frames auf Frames zu wechseln ändert nichts. Dass Du <div>-Elemente so konsequent betonst, ist ebenfalls erfahrungsgemäß bedenklich; Du könntest in ihnen Bedeutungen zu sehen, die sie nicht haben.

    Ich bin nicht zwangsläufig auf frames fixiert oder ein Fan von ihnen, aber es lässt sich sehr leicht damit umgehen.

    Nein, der Umgang mit Frames bringt eine Vielzahl teilweise sehr großer Schwierigkeiten mit sich, die die Zusatzproblematik besitzen, häufig erst spät erkannt zu werden.

    Etwas in einem iframe aufrufen geht ja problemlos, aber geht das auch bei divs?

    Nein - Dein Vorteil.

    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. Die frames f1 und f6 haben immer denselben Inhalt. Der Inhalt von f3 und f5 ändert sich nach dem Login, f4 ständig und f2 nur, wenn man einen anderen Bereich der Website betritt. PHP machts möglich.

      Und ein Client, der Frames ansteuert bzw. verwaltet, nehme ich an. Funktioniert das ganze auch ohne JavaScript oder ohne visuelle Darstellung (Screenreader, Suchmaschinen-Robots)?

      Ja, das ganze funktioniert einwandfrei (auf dem lokalen System - xampplite). Auf JAVA verzichte ich komplett, da vom User abschaltbar. Inzwischen ist mir bei meinen Recherchen im Net auch wieder eingefallen, dass auch frames abschaltbar sind. Ich schreibe daher meine scripte bereits um auf divs.

      ("location: index.php");

      Der Location-Header verlangt eine absolute URL.

      Ich weiss jetzt nicht genau, was Du damit meinst, aber das aufrufende script liegt im selben Verzeichnis und die index.php wird auch korrekt aufgerufen.

      Nein, der Umgang mit Frames bringt eine Vielzahl teilweise sehr großer Schwierigkeiten mit sich, die die Zusatzproblematik besitzen, häufig erst spät erkannt zu werden.

      Stimmt, habe ich soeben selbst erfahren. Obwohl, wenn man ein frameset auflösen könnte, nicht nur mit <a href....target='_top'>, wäre mein Hauptproblem erstmal gelöst.

      Danke für Deine Antwort.

      Gruss
      Thorsten

      1. Hallo,

        Und ein Client, der Frames ansteuert bzw. verwaltet, nehme ich an. Funktioniert das ganze auch ohne JavaScript oder ohne visuelle Darstellung (Screenreader, Suchmaschinen-Robots)?
        Ja, das ganze funktioniert einwandfrei (auf dem lokalen System - xampplite). Auf JAVA verzichte ich komplett, da vom User abschaltbar.

        und bei vielen noch nicht einmal installiert. Oder meintest du Javascript? Das hat mit Java ungefähr so viel zu tun wie Kamm mit Kammermusik.

        Ich schreibe daher meine scripte bereits um auf divs.

        Wo liegt deiner Meinung nach die Analogie von Frames und div-Elementen, oder warum meinst du, das eines das andere ersetzen könnte?

        ("location: index.php");
        Der Location-Header verlangt eine absolute URL.
        Ich weiss jetzt nicht genau, was Du damit meinst, aber das aufrufende script liegt im selben Verzeichnis und die index.php wird auch korrekt aufgerufen.

        Glück gehabt, dass die meisten Browser so fehlertolerant sind.

        Stimmt, habe ich soeben selbst erfahren. Obwohl, wenn man ein frameset auflösen könnte, nicht nur mit <a href....target='_top'>, wäre mein Hauptproblem erstmal gelöst.

        Das Frameset aufzulösen, ist deine Aufgabe als Autor.

        Ciao,
         Martin

        --
        Kleine Geschenke erhalten die Freundschaft.
        Große verderben sie aber meist auch nicht.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Auf JAVA verzichte ich komplett, da vom User abschaltbar.

          und bei vielen noch nicht einmal installiert. Oder meintest du Javascript? Das hat mit Java ungefähr so viel zu tun wie Kamm mit Kammermusik.

          Ja, ich meinte Javascript. Als ich damals mit PHP anfing, stiess ich auch auf Javascript. Vielleicht habe ich damals schon etwas falsch verstanden, nämlich dass man diese Sprache Clientseitig abschalten kann, jedenfalls habe ich dann festgestellt, dass ich Javascript nicht brauche, weder für das, was ich bisher gemacht habe und auch bei dem, was ich gerade mache, nicht. Bei der Gelegenheit kann man das vielleicht klären: kann man Javascript abschalten?

          Wo liegt deiner Meinung nach die Analogie von Frames und div-Elementen, oder warum meinst du, das eines das andere ersetzen könnte?

          Ich meine eben nicht, dass das eine das andere ersetzen kann. Für meine Problematik (siehe mein erstes posting) sind frames ungeeignet, div-Elemente dagegen nicht. Ich kann im laufenden script ein frameset nicht zurücksetzen (oder löschen). Es muss offenbar zunächst 'jemand' auf einen Link klicken, der "...target=_top" beinhaltet. Oder geht es doch anders? Habe ich beim Experimentieren etwas übersehen?

          Gruss
          Thorsten

          1. Hi,

            Ja, ich meinte Javascript. Als ich damals mit PHP anfing, stiess ich auch auf Javascript. Vielleicht habe ich damals schon etwas falsch verstanden, nämlich dass man diese Sprache Clientseitig abschalten kann

            das ist auch korrekt. Und nicht nur abschalten - die heutigen Browser erlauben teils, sehr gezielt einzelne Javascript-Features zu erlauben oder eben zu verweigern.

            Bei der Gelegenheit kann man das vielleicht klären: kann man Javascript abschalten?

            Ja. Bei mir gilt beispielsweise: Javascript ist grundsätzlich deaktiviert; nur handverlesene Seiten, auf denen JS für meinen Geschmack sinnvoll und nutzbringend eingesetzt wird, kommen auf die Whitelist.

            Wo liegt deiner Meinung nach die Analogie von Frames und div-Elementen, oder warum meinst du, das eines das andere ersetzen könnte?
            Ich meine eben nicht, dass das eine das andere ersetzen kann.

            Hmm, deine Darstellung ließ den Eindruck entstehen.

            Für meine Problematik (siehe mein erstes posting) sind frames ungeeignet, div-Elemente dagegen nicht. Ich kann im laufenden script ein frameset nicht zurücksetzen (oder löschen). Es muss offenbar zunächst 'jemand' auf einen Link klicken, der "...target=_top" beinhaltet. Oder geht es doch anders? Habe ich beim Experimentieren etwas übersehen?

            Natürlich kann man div-Elemente jederzeit "verschwinden lassen", indem man sie unsichtbar macht oder komplett aus dem DOM löscht. Das geht aber mit jedem anderen Element (einschließlich iframe) auch. Allerdings erfordert das den Einsatz von Javascript, egal welches Element man nutzt.

            Aber ich denke vielmehr, du solltest -da du sowieso PHP einsetzt- für jede Benutzer-Interaktion ein vollständiges HTML-Dokument ausliefern und nicht krampfhaft versuchen, nur Teile des Dokuments zu ersetzen. Das ist ohne Javascript sowieso nicht möglich, und mit Javascript IMHO auch nicht sinnvoll.

            Ciao,
             Martin

            --
            Das Gehirn ist schon eine tolle Sache: Es fängt ganz von allein an zu arbeiten, wenn man morgens aufsteht, und hört erst damit auf, wenn man in der Schule ankommt.
              (alte Schülererkenntnis)
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(