pb: und noch mal: frames

bevor sich jemand beschwert: ich weiß, Frames sind sowas von over and out (seit HTML5, Ajax etc.), aber ...

Die (.html-)Seiten laufen lokal, same Origin. Ich habe ein frameset mit zwei Frames: frame[0] (name: auswertung), der 'empfängt' Daten von frame[1] (name: main). Das klappt soweit (Dank netter Hilfe hier im Forum).

<frameset rows="0,*" border="0" frameborder="0">
<frame name="auswertung" src="auswertung.html">
<frame name="main" src="main.html">
</frameset>

frame[0] ist 'unsichtbar' (Größe im frameset: 0) ... mit welcher Art von Link / JavaScript-Anweisung / PHP-Code kann ich diesen frame[0] 'vergrößern' auf das (volle) Browser-Fenster ohne diese Seite (neu) zu laden (denn dann sind die eingetragenen Daten natürlich weg) ... sofern das überhaupt geht?

Mit

parent.frames[0].document.moveTo(0,0);
parent.frames[0].resizeTo(screen.availWidth,screen.availHeight);

oder ähnlich, aufgerufen aus der main.html, sollte es eigentlich funktionieren ... tut es aber nicht? Wo ist mein Denk- bzw. Syntax-Fehler?

  1. Servus!

    bevor sich jemand beschwert: ich weiß, Frames sind sowas von over and out (seit HTML5, Ajax etc.), aber ...

    Übrigens, Frames sind out, seit …

    Die (.html-)Seiten laufen lokal, same Origin. Ich habe ein frameset mit zwei Frames: frame[0] (name: auswertung), der 'empfängt' Daten von frame[1] (name: main). Das klappt soweit (Dank netter Hilfe hier im Forum).

    <frameset rows="0,*" border="0" frameborder="0">
    <frame name="auswertung" src="auswertung.html">
    <frame name="main" src="main.html">
    </frameset>
    

    frame[0] ist 'unsichtbar' (Größe im frameset: 0) ... mit welcher Art von Link / JavaScript-Anweisung / PHP-Code kann ich diesen frame[0] 'vergrößern' auf das (volle) Browser-Fenster ohne diese Seite (neu) zu laden (denn dann sind die eingetragenen Daten natürlich weg) ... sofern das überhaupt geht?

    HTML macht das selbst! In einem HTML-Dokument gehen die HTML-Elemente ohne weitere CSS-Festlegungen bis zum Ende des Viewports und brechen dann automatisch um.

    Wo ist mein Denk- bzw. Syntax-Fehler?

    Dass Du denkst, dass es einfacher ist, Deine Frames zu modernisieren, als beide Frames in ein HTML-Dokument zu stecken und dann nicht mehr normale Features von HTML mit JavaScript nachbauen zu müssen.

    Bitte nimm es nicht übel! Ich bin Lehrer und höre häufig von 5.-7. Klässlern, dass es auf ihre Weise doch auch geht. Das frustriert auf Dauer.

    Herzliche Grüße

    Matthias Scharwies

    --
    Einfach mal was von der ToDo-Liste auf die Was-Solls-Liste setzen.“
    1. Warum sollte ich es dir übel nehmen, dass du Lehrer bist? Ich frage ja hier im Forum, WEIL ich etwas lernen will. Aber dazu sollte ich auch verstehen, was du mir mitteilen willst ... und das fällt mir bei diesem Satz sehr schwer:

      Dass Du denkst, dass es einfacher ist, Deine Frames zu modernisieren, als beide Frames in ein HTML-Dokument zu stecken und dann nicht mehr normale Features von HTML mit JavaScript nachbauen zu müssen.

      Ich möchte meine Frames nicht 'modernisieren' und auch nicht den LocalStorage von HTML5 oder Frameworks oder PHP nutzen, sondern ganz bewußt und absichtlich diese Uralt-Technik (Frameset) für ein Spiel- und Bastelprojekt nutzen, gerade weil ich es interessant finde, eben ohne Datenbank und oben genanntes, Daten zu 'verarbeiten'. Wahrscheinlich (ganz sicher) habe ich meine Frage/n nur nicht eindeutig und verständlich genug formuliert ... denn ich verstehe auch diese Antwort leider nicht:

      HTML macht das selbst! In einem HTML-Dokument gehen die HTML-Elemente ohne weitere CSS-Festlegungen bis zum Ende des Viewports und brechen dann automatisch um.

      Danke aber für JEDE Anregung und JEDEN Kommentar!

      1. Hallo pb,

        du klammerst Dich vermutlich ans Frameset weil Du die Alternativen nicht kennst.

        Wenn es darum geht, das Fenster aufzuteilen, kann man bspw. Grid-Layout verwenden und durch einfaches Zuweisen einer Klasse die Zeilen- oder Spalten-Templates umschalten. Dann steckt natürlich alles in einer HTML Seite.

        Geht es Dir unbedingt darum, zwei HTML Dateien miteinander kommunizieren zu lassen, die separat geladen werden? Wenn ja: warum nur? Das ist kein relevanter Anwendungsfall.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Hello,

          du klammerst Dich vermutlich ans Frameset weil Du die Alternativen nicht kennst.

          Wenn es darum geht, das Fenster aufzuteilen, kann man bspw. Grid-Layout verwenden und durch einfaches Zuweisen einer Klasse die Zeilen- oder Spalten-Templates umschalten. Dann steckt natürlich alles in einer HTML Seite.

          Geht es Dir unbedingt darum, zwei HTML Dateien miteinander kommunizieren zu lassen, die separat geladen werden? Wenn ja: warum nur? Das ist kein relevanter Anwendungsfall.

          Nicht zu vergessen, dass Frames erfunden wurden, als es noch um totale Traffic-Minimierung ging und 64kBit/s noch als äußerst innovativ und schnell galten.

          Heute (4G) kostet ein zusätzlicher Request x-mal mehr Zeit, als die sofortige (textliche) Übertragung aller erforderlicher Daten.

          Glück Auf
          Tom vom Berg

          --
          Es gibt soviel Sonne, nutzen wir sie.
          www.Solar-Harz.de
          S☼nnige Grüße aus dem Oberharz
      2. Hallo PB,

        Warum sollte ich es dir übel nehmen, dass du Lehrer bist? Ich frage ja hier im Forum, WEIL ich etwas lernen will. Aber dazu sollte ich auch verstehen, was du mir mitteilen willst ... und das fällt mir bei diesem Satz sehr schwer:

        Dass Du denkst, dass es einfacher ist, Deine Frames zu modernisieren, als beide Frames in ein HTML-Dokument zu stecken und dann nicht mehr normale Features von HTML mit JavaScript nachbauen zu müssen.

        Wir können nur raten, wie es genau bei Dir aussieht. Manchmal hat man etwas aus vergangenen Threads im Hinterkopf:

        Noch mal: das ist ein privates Bastelprojekt das auf einem Raspi läuft für das ich Frames brauche;

        Die Arbeit mit den Mikrocontrollern ist spannend und wir haben da einige interne Baustellen und gleich neben dir sogar einen Jobauftrag:

        Modbus und Raspberry Pi

        Dein Problem scheinen ja aber wohl die Frames zu sein. Ich hatte in den letzten Jahren einigen Kontakt mit Leuten, deren Webseite zumindest auf Chrome irgendwann „nicht mehr ging“. @Rolf B hatte schon die Begriffe Same-Origin (im Wiki: Same-Origin-Policy) verwendet.

        In den letzten Jahren haben die Browser die Sicherheitsstandards bei JavaScript, aber auch anderen Technologien so hochgeschraubt, dass die Browser es erschweren, andere Webseiten auszulesen. Deshalb ist das von Rolf erwähnte lokale Testen ohne Server z.B. bei eingebundenen Schriften gar nicht mehr möglich. Fazit: Man muss eigentlich immer gleich einen eigenen Server haben. (Wie das geht wird in Kap 2 und 3 in unserem Webserver-Bereich beschrieben. Ein Bereich zu Raspberry ist in Arbeit!)

        Jetzt zu Deinem konkreten Problem:

        mit welcher Art von Link / JavaScript-Anweisung / PHP-Code kann ich diesen frame[0] 'vergrößern' auf das (volle) Browser-Fenster ohne diese Seite (neu) zu laden (denn dann sind die eingetragenen Daten natürlich weg) .

        parent.frames[0].resizeTo(screen.availWidth,screen.availHeight);

        Antwort: Eine „normale“ Webseite nimmt eben „das (volle) Browser-Fenster“ ein und eine Änderung des Viewports (Handy wird um 90° gedreht; Seite wird gezoomt, Desktop-Monitor wird geteilt) sorgt für eine automatische Anpassung ohne weiteres CSS „ohne diese Seite (neu) zu laden (denn dann sind die eingetragenen Daten natürlich weg)“.

        Mit CSS (wie dem von Rolf erwähnten grid) könnte man dann Tabellen und Diagramme nebeneinander anstatt untereinander anordnen.

        In Deinem Ansatz musst Du erst einmal mit Javascript Breite und Höhe des Bildschirms auslesen um dann deinen Frame mit resize anzupassen. wenn Du das gelöst hast, wirst Du bald das nächste problem mit frames bekommen.

        Was hier aber völlig fehlt ist die Frage, welche Daten von wo kommen. Das wäre noch interessant!

        Ich möchte meine Frames nicht 'modernisieren' und auch nicht den LocalStorage von HTML5 oder Frameworks oder PHP nutzen, sondern ganz bewußt und absichtlich diese Uralt-Technik (Frameset) für ein Spiel- und Bastelprojekt nutzen, gerade weil ich es interessant finde, eben ohne Datenbank und oben genanntes, Daten zu 'verarbeiten'.

        Ja, da stößt du aber immer wieder auf Probleme und Herausforderungen, die du sonst nicht hättest.

        @TS und ich wollten den Raspberry-Bereich mit mehreren Tutorials irgendwann mal zur Veröffentlichung bringen. Evtl. ist dass der Anstoß, da mal wieder weiterzumachen![1]

        Herzliche Grüße

        Matthias Scharwies

        --
        Einfach mal was von der ToDo-Liste auf die Was-Solls-Liste setzen.“

        1. Für alle Webdesign-Puristen: Es geht nicht drum im SELF-Wiki das Löten und Basteln neu einzuführen, sondern die Schnittstellen zwischen Webdesign, Server und Raspberry und Datenvisualsierung aufzuzeigen. ↩︎

        1. Hallo,

          … Datenvisualsierung …

          ich nehme das Stichwort mal auf und verweise auf unser Wiki:

          Gruß
          Jürgen

          1. Hello Jürgen,

            … Datenvisualsierung …

            ich nehme das Stichwort mal auf und verweise auf unser Wiki:

            Kommt auch in meine Sammlung.
            Und dann gibt es ja immer noch den großen Hammer: Grafana

            Glück Auf
            Tom vom Berg

            --
            Es gibt soviel Sonne, nutzen wir sie.
            www.Solar-Harz.de
            S☼nnige Grüße aus dem Oberharz
        2. Hello Matthias,

          Warum sollte ich es dir übel nehmen, dass du Lehrer bist? Ich frage ja hier im Forum, WEIL ich etwas lernen will. Aber dazu sollte ich auch verstehen, was du mir mitteilen willst ... und das fällt mir bei diesem Satz sehr schwer:

          Dass Du denkst, dass es einfacher ist, Deine Frames zu modernisieren, als beide Frames in ein HTML-Dokument zu stecken und dann nicht mehr normale Features von HTML mit JavaScript nachbauen zu müssen.

          Wir können nur raten, wie es genau bei Dir aussieht. Manchmal hat man etwas aus vergangenen Threads im Hinterkopf:

          Noch mal: das ist ein privates Bastelprojekt das auf einem Raspi läuft für das ich Frames brauche;

          Die Arbeit mit den Mikrocontrollern ist spannend und wir haben da einige interne Baustellen und gleich neben dir sogar einen Jobauftrag:

          Modbus und Raspberry Pi

          Dein Problem scheinen ja aber wohl die Frames zu sein. Ich hatte in den letzten Jahren einigen Kontakt mit Leuten, deren Webseite zumindest auf Chrome irgendwann „nicht mehr ging“. @Rolf B hatte schon die Begriffe Same-Origin (im Wiki: Same-Origin-Policy) verwendet.

          In den letzten Jahren haben die Browser die Sicherheitsstandards bei JavaScript, aber auch anderen Technologien so hochgeschraubt, dass die Browser es erschweren, andere Webseiten auszulesen. Deshalb ist das von Rolf erwähnte lokale Testen ohne Server z.B. bei eingebundenen Schriften gar nicht mehr möglich. Fazit: Man muss eigentlich immer gleich einen eigenen Server haben. (Wie das geht wird in Kap 2 und 3 in unserem Webserver-Bereich beschrieben. Ein Bereich zu Raspberry ist in Arbeit!)

          Jetzt zu Deinem konkreten Problem:

          mit welcher Art von Link / JavaScript-Anweisung / PHP-Code kann ich diesen frame[0] 'vergrößern' auf das (volle) Browser-Fenster ohne diese Seite (neu) zu laden (denn dann sind die eingetragenen Daten natürlich weg) .

          parent.frames[0].resizeTo(screen.availWidth,screen.availHeight);

          Antwort: Eine „normale“ Webseite nimmt eben „das (volle) Browser-Fenster“ ein und eine Änderung des Viewports (Handy wird um 90° gedreht; Seite wird gezoomt, Desktop-Monitor wird geteilt) sorgt für eine automatische Anpassung ohne weiteres CSS „ohne diese Seite (neu) zu laden (denn dann sind die eingetragenen Daten natürlich weg)“.

          Mit CSS (wie dem von Rolf erwähnten grid) könnte man dann Tabellen und Diagramme nebeneinander anstatt untereinander anordnen.

          In Deinem Ansatz musst Du erst einmal mit Javascript Breite und Höhe des Bildschirms auslesen um dann deinen Frame mit resize anzupassen. wenn Du das gelöst hast, wirst Du bald das nächste problem mit frames bekommen.

          Was hier aber völlig fehlt ist die Frage, welche Daten von wo kommen. Das wäre noch interessant!

          Ich möchte meine Frames nicht 'modernisieren' und auch nicht den LocalStorage von HTML5 oder Frameworks oder PHP nutzen, sondern ganz bewußt und absichtlich diese Uralt-Technik (Frameset) für ein Spiel- und Bastelprojekt nutzen, gerade weil ich es interessant finde, eben ohne Datenbank und oben genanntes, Daten zu 'verarbeiten'.

          Ja, da stößt du aber immer wieder auf Probleme und Herausforderungen, die du sonst nicht hättest.

          @TS und ich wollten den Raspberry-Bereich mit mehreren Tutorials irgendwann mal zur Veröffentlichung bringen. Evtl. ist dass der Anstoß, da mal wieder weiterzumachen![1]

          Stimmt. Ich hadere schon seit Wochen, mich endlich wieder an den passenden Schreibtisch zu setzen und die gesammelten Toolboxen und Tutorials mal zu sortieren und auszuwerten.

          Und dann gehe ich doch immer erst wieder raus, um meine Solar-Testanlagen vom Saharastaub zu säubern :-O

          Aber nun kehrt ja der Winter so langsam ein (Nachts schon knapp über der Frostgrenze) und da lohnt sich das Putzen nicht mehr so sehr. Außerdem hat es die letzten 14 Tage hier oben immer wieder geregnet. Meine Wassertonne ist dauerhaft voll.

          Die Himbeere kann sich also schon mal in Startposition bewegen.

          Glück Auf
          Tom vom Berg

          --
          Es gibt soviel Sonne, nutzen wir sie.
          www.Solar-Harz.de
          S☼nnige Grüße aus dem Oberharz

          1. Für alle Webdesign-Puristen: Es geht nicht drum im SELF-Wiki das Löten und Basteln neu einzuführen, sondern die Schnittstellen zwischen Webdesign, Server und Raspberry und Datenvisualsierung aufzuzeigen. ↩︎

  2. Hallo pb,

    ich würde annehmen, dass Du das rows-Attribut im Frameset verändern musst und nicht den Frame selbst. Das Frameset kontrolliert die Größen.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hab ich auch drüber nachgegrübelt. Aber, wie auch immer, ich müsste das Frameset ja nach Änderung der Row-Werte wohl neu laden ... und damit wären die gesammelten Daten wieder weg!? Ich wollte eigentlich PHP vermeiden und ein 'reines' (wenn auch vorsintflutliches) HTML/JavaScript-Konstrukt benutzen, aber es wäre vielleicht eine Lösung die Daten-gefüllte Seite (frame[0]) vor dem Aufruf/Anzeige zuerst lokal zu speichern?

      1. Hi,

        ich würde versuchen über versuchen über die id zu gehen. Die Seite wird dabei nicht neu geladen, wenn du mit Javascript Werte änderst.

        var myFrameset = parent.document.getElementById("myFrameset");
        var value = "100%,0"
        myFrameset.removeAttribute("rows");
        myFrameset.setAttribute("rows", value);
        
        1. Als England noch eine Königin hatte Im vorigen Jahrtausend wäre das Folgende akzeptabel gewesen. Immerhin: Via php -S 127.0.0.1:9000 „serviert“ „macht“ es mein Chromium noch. Er weigert sich aber sobald ich die index.html direkt vom Filesystem öffnen will.

          File: index.html

          <html>
          	<frameset id="myFrameset" cols="50%,50%" border="0" frameborder="0">
          		<frame name="links"  src="links.html">
          		<frame name="rechts" src="rechts.html">
          	</frameset>
          <html>
          

          File: links.html

          <html>
          <script>
          function vollbildL() {
          	var myFrameset = parent.document.getElementById("myFrameset");
          	myFrameset.setAttribute("cols", 100%,0%);
          }
          
          function einordnenL() {
          	var myFrameset = parent.document.getElementById("myFrameset");
          	myFrameset.setAttribute("cols", "50%,50%");
          }
          </script>
          <h1>Links</h1>
          <button onclick="vollbildL()">Vollbild</button>
          <button onclick="einordnenL()">Einordnen</button>
          </html>
          

          File: rechts.html

          <html>
          <script>
          function vollbildR() {
          	var myFrameset = parent.document.getElementById("myFrameset");
          	myFrameset.setAttribute("cols", "0%,100%");
          }
          function einordnenR() {
          	var myFrameset = parent.document.getElementById("myFrameset");
          	myFrameset.setAttribute("cols", "50%,50%");
          }
          </script>
          <h1>Rechts</h1>
          <button onclick="vollbildR()">Vollbild</button>
          <button onclick="einordnenR()">Einordnen</button>
          </html>
          

          Nachtrag: Man verzeihe mir Nutzung des modernen <button>. Mit

          <input type="button" value="" onclick="">`
          

          wird das aber auch gehen. Wer also ein Museum einrichten will ändere das, wer aber neue Webseiten baut (wir haben den 21.09.2022) mache das einfach mal nicht nach.

          1. Hallo Raketenwilli,

            es ist zwar ein Museum, aber muss es paläontologisch sein?

            • parent.document.getElementById("myFrameset")- warum?

              • parent.document.body geht auch.
            • get/setAttribute("rows")- warum?

              • Es gibt ein rows Property.
            • var? Achso, const und let sind zu neu.

            Er weigert sich aber sobald ich die index.html direkt vom Filesystem öffnen will.

            Was daran liegt, dass diese Spielerei same-origin verlangt und file:/// niemals same-origin ist.

            Rolf

            --
            sumpsi - posui - obstruxi
            1. es ist zwar ein Museum, aber muss es paläontologisch sein?

              Aber ja doch: „Webmuseum“ ist nur der Begriff in der allvermurksenden Umgangssprache. Korrekt heißt es „Museum für Frühgeschichte des Webkrams“.

              Was daran liegt, dass diese Spielerei same-origin verlangt und file:/// niemals same-origin ist

              Das ist geradezu „brandneu“. Als ich das sowas zum letzten Mal getestet habe, gab es diese (und solche Regel)[n] noch gar nicht…

              (Rest:)

              • Man kann immer alles verschlimmbessern.
  3. Ich weiß ja nicht, wozu das ganze gebraucht wird, aber vielleicht reicht es ja schon, wenn du die erste Zeile deines Framesets durch<frameset rows="0,*" border="3" frameborder="3"> ersetzt. Dann kannst du den Rahmen zwischen deinen Frames einfach verschieben. Wenn du nach unten schiebst, siehst du die Auswertung, nach oben siehst du Main.