AstroPhysik
Anmeldungsdatum: 9. Mai 2009
Beiträge: 219
Wohnort: Wien
|
Hallo, Ich betreibe einen Infoscreen mit einem Pi (Debian wheezy), der einfach 2 png Bilder anzeigt.
Chromium lädt einfach jede Minute eine URL neu.
Problem: manchmal ist der Server und somit die URL nicht erreichbar, weil Kollegen damit spielen... ähm was anderes damit arbeiten... (ist leider so..) Chromium aktualisiert sich normalerweise über eine HTML Seite wo <meta http-equiv="refresh" content="60" ;="" url="start.html"> eingebaut ist neu. Nur wenn die URL offline ist, bleibt Chromium mit der Meldung Webseite nicht erreichbar hängen, und lädt sich dann nicht mehr von selbst neu. Wie kann dem abgeholfen werden?
Also wie kann man Chromium dazu bringen die URL erneut zu laden wenn sie eben wieder verfügbar ist. Danke & vg.
AP.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
Du könntest eine eigene Seite machen, die die eigentliche Seite per IFRAME einbindet und per JavaScript alle n Sekunden den IFRAME neu lädt. Wenn Du es noch ganz schlau machen willst, kannst Du vielleicht testen, wann der IFRAME das letzte Mal neu geladen wurde und falls das weniger als x Sekunden her ist, lädt das Skript nicht neu (weil Du ja im Normalfall den Refresh der Seite nutzt).
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
|
AstroPhysik
(Themenstarter)
Anmeldungsdatum: 9. Mai 2009
Beiträge: 219
Wohnort: Wien
|
Hallo, derzeit mache ich das so ähnlich über eine Startseite mit frame, die zwei andere Seiten (die eigentlichen) lädt. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<meta http-equiv="refresh" content="60" ;="" url="start.html">
<meta http-equiv="expires" content="0">
<title>Supplierungen</title>
</head>
<frameset rows="100% " cols="*, 35%">
<frame src="Supplierungen-Dateien/aushang.html">
<frame src="Supplierungen-Dateien/info.html">
</frameset>
</html>
|
Ich verstehe noch nicht ganz, wie iframe da abhelfen soll, lese mich aber mal damit ein. Danke einstweilen
AP.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Wenn alles nicht hilft, könntest Du ja die beiden Bilder einfach regelmäßig im Hintergrund mit curl oder wget herunterladen, und mit dem Browser auf die lokalen Kopien zugreifen ... Das wäre, woran ich als alter CL- Hase als erstes denken würde. 😉 LG, track p.s.: oder sogar den Browser Browser sein lassen, und die Bilder mit was anderem anzeigen ? - wäre auf jeden Fall schlanker.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
AstroPhysik schrieb:
derzeit mache ich das so ähnlich über eine Startseite mit frame, die zwei andere Seiten (die eigentlichen) lädt.
Das wusste ich nicht.
Ich verstehe noch nicht ganz, wie iframe da abhelfen soll, lese mich aber mal damit ein.
Mit Frames müsste es genau so gehen. Ich habe auch noch eine andere Idee: es gibt auch Browser-Erweiterungen, die einen automatischen Reload der aktuellen Seite vornehmen. Mindestens für FireFox hatte ich so etwas mal installiert.
|
ExcitedSpoon
Anmeldungsdatum: 17. Juli 2010
Beiträge: 226
Wohnort: /home/berlin
|
Den reload bekommt man zuverlässig per iframe und javascript hin, etwa so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | <html>
<head>
<title>reloading iframe</title>
<style type="text/css">
body { margin: 0; }
#reloadingIFrame { width: 100%; height: 100%; border: none; }
</style>
</head>
<body>
<iframe id="reloadingIFrame" src="frame.html"></iframe>
<script>
(function() {
var iframe = document.getElementById('reloadingIFrame'),
src = iframe.src; // urspüngliche frame-src merken
var reloadIFrame = function() {
iframe.src = src;
}
setInterval(reloadIFrame, 60 * 1000); // alle 60 sec
})();
</script>
</body>
</html>
|
So wird alle 60 Sekunden die ursprünglich gesetzte iframe-src neu geladen. Normale frames reloaden funktioniert auf die gleiche weise. Der iframe füllt 100% der Seite, sodass er nicht als solcher auffällt. Grüße
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
ExcitedSpoon schrieb: Den reload bekommt man zuverlässig per iframe und javascript hin, etwa so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | <html>
<head>
<title>reloading iframe</title>
<style type="text/css">
body { margin: 0; }
#reloadingIFrame { width: 100%; height: 100%; border: none; }
</style>
</head>
<body>
<iframe id="reloadingIFrame" src="frame.html"></iframe>
<script>
(function() {
var iframe = document.getElementById('reloadingIFrame'),
src = iframe.src; // urspüngliche frame-src merken
var reloadIFrame = function() {
iframe.src = src;
}
setInterval(reloadIFrame, 60 * 1000); // alle 60 sec
})();
</script>
</body>
</html>
|
Genau an so etwas hatte ich gedacht. 👍 Nur zu meinem Verständnis, was da passiert: Du erzeugst eine Closure mit einer anonymen Funktion, die Du ein einziges Mal ausführst (das letzte Klammernpaar). Die Closure schließt über das DOM-Objekt des IFRAME, die URL des IFRAME und eine weitere anonyme Funktion, die den tatsächlichen Reload ausführt. Letztgenannte Funktion wird über setInterval() regelmäßig ausgeführt. Warum funktioniert es nicht, wenn man den <script> -Tag in den Header verschiebt?
|
ExcitedSpoon
Anmeldungsdatum: 17. Juli 2010
Beiträge: 226
Wohnort: /home/berlin
|
rklm schrieb: Warum funktioniert es nicht, wenn man den <script> -Tag in den Header verschiebt?
Wenn du das Skript Tag so in den Header schreibst, dann kann der iframe nicht referenziert werden, da dieser noch nicht im DOM ist (Die Funktion feuert direkt, wenn das script-tag geladen wurde). Sowas kann man unterbinden, indem man das ganze erst evaluiert, wenn das document vollständig geladen ist, also sowas:
| <script>
document.addEventListener("DOMContentLoaded", function(event) {
// ... inhalt der closure ...
});
</script>
|
Dann kannst du's auch in den Header packen. Die Closure hat dort übrigens einfach nur den Sinn, dass die Variablen nicht in den globalen namespace leaken.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
ExcitedSpoon schrieb: rklm schrieb: Warum funktioniert es nicht, wenn man den <script> -Tag in den Header verschiebt?
Wenn du das Skript Tag so in den Header schreibst, dann kann der iframe nicht referenziert werden, da dieser noch nicht im DOM ist (Die Funktion feuert direkt, wenn das script-tag geladen wurde). Sowas kann man unterbinden, indem man das ganze erst evaluiert, wenn das document vollständig geladen ist, also sowas:
Ah ja. Etwas in der Richtung hatte ich auch schon vermutet. Ich hatte mich nur über eine fehlende Fehlermeldung gewundert, als ich es ausprobiert habe. Danke!
Dann kannst du's auch in den Header packen. Die Closure hat dort übrigens einfach nur den Sinn, dass die Variablen nicht in den globalen namespace leaken.
Klar, deshalb ist es ja eine Closure.
|