und noch mal: frames
pb
- frames
- html
- meinung
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?
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
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!
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
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
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:
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
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. ↩︎
Hallo,
… Datenvisualsierung …
ich nehme das Stichwort mal auf und verweise auf unser Wiki:
Gruß
Jürgen
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
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:
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
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. ↩︎
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
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?
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);
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.
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?
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
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:)
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.