# iframe automatisch aktualisieren lassen



## Schpringer (4. September 2010)

Hallo liebes Forum

Habe mir jetzt 2 Stunden die Finger wund gesucht. Ich habe ein Anliegen, welches sehr dringend ist 

Besucht die Site http://www.snooker-4d.ch

Im Moment führen wir ein Turnier mit Livestream und Livescore durch. Im Menu ganz unten könnt ihr auf Livestream klicken, dann zum Beispiel auf Tisch1.

So nun mein Problem:

Wie ihr feststellt lädt die Seite alle 30sek neu. Dadurch können wir den Livescore immer aktuell halten. Das Problem ist nun, dass durch die Aktualisierung der Livestream (Video) immer neu geladen wird. und dies ist sehr ungünstig, da man das Spiel ohne unterbruch verfolgen möchte.


```
<META NAME="oben" CONTENT="no-cache">
<meta http-equiv="refresh" content="60">
```

Die Highscores sind via iframe in die Seite eingebunden. Nun mein Ziel ist es, nur die einzelnen iframes alle 30sek zu refreshen. 
Ich weiss, dass ich die Zieldatei mit einem Meta Befehl versehen und somit zum Refresh bringen könnte. Das geht aber leider nicht, da die html Datei mit dem Livescore immer neu geschrieben wird und somit der Meta-Befehl verschwinden würde. Wie kann ich nun im iframe den refresh einstellen? Irgendwie klappt nichts so, wie man sich das wünscht. Oder könnte man auch die META im Header auf den iframe (sind 4 pro Seite) steuern?

Der Code:


```
<iframe src="http://www.snooker-4d.ch/static/livescore_table1.html" name="Tisch 1" scrolling="no" frameborder="no" align="center" height = "160px" width = "500px">
</iframe>
```

Die Homepage wird mit einem Baukastensystem gemacht. Somit habe ich nicht direkten Einfluss auf den Quellcode. Nur auf den Head

Ich danke euch schonmal für eure Antworten.

Viele Grüsse

Mike


----------



## ComFreek (4. September 2010)

Schpringer hat gesagt.:


> Die Homepage wird mit einem Baukastensystem gemacht. Somit habe ich nicht direkten Einfluss auf den Quellcode. Nur auf den Head


 
Das könnte mit JavaScript klappen:

```
var iframe;
window.onload = function()
{
  iframe = document.getElementById("IdDesIframes");
  window.setInterval("RefreshIFrame()", 60000); // 60000 ms = 60 Sek.
}
function RefreshIFrame()
{
  iframe.location.reload();
}
```
(In einen Script-Tag im Head einbinden; Code ist ungetestet!)


----------



## Schpringer (4. September 2010)

Hallo und vielen Dank für deine Antwort

Stimmt das so?


```
<script type="javascript">
var iframe;
window.onload = function()
{
  iframe = document.getElementById("Tisch1");
  window.setInterval("RefreshIFrame()", 3000); // 60000 ms = 60 Sek.
}
function RefreshIFrame()
{
  iframe.location.reload();
}
</script>
```


----------



## ComFreek (4. September 2010)

Alles stimmt, außer die Angabe des type-Attributs. Es muss so heißen:

```
<script type="text/javascript">
```

Außerdem würde ich den Kommentar ändern, da du ja den Intervall auf 3 Sekunden gestellt hast


----------



## Schpringer (4. September 2010)

Das hatte ich zuerst auch, aber es passiert nichts.

Die 3 Sekunden habe ich zum testen so eingestellt. Anstatt immer 60sek zu warten, obs funktioniert 

Aber eben. Es passiert nichts..


----------



## ComFreek (4. September 2010)

Kannst du vielleicht den ganzen Code posten oder eine URL geben?
Eventuell kannst du auch die Fehlerkonsole des Browsers öffnen.


----------



## Schpringer (4. September 2010)

Natürlich 

Also im Head steht nun:


```
<META NAME="oben" CONTENT="no-cache">
<script type="text/javascript">
var iframe;
window.onload = function()
{
  iframe = document.getElementById("Tisch1");
  window.setInterval("RefreshIFrame()", 3000); // 60000 ms = 60 Sek.
}
function RefreshIFrame()
{
  iframe.location.reload();
}
</script>
```

Die no-cache wurde mir empfohlen, damit der Browser nichts in den Cache speichert.

Bei der Fehlerkonsole kommt tatsächlich alle 3sek (meine Zeiteinstellung) eine Fehlermeldung:

Fehler: iframe is null
Quelldatei: http://127.0.0.1:7566/livestream-summer-cup-2010/tisch-1/index.php
Zeile: 56

Sagt dir das was?

Ich bedanke mich schon mal


----------



## ComFreek (4. September 2010)

Ja, der Fehler sagt mir was.
Das document.getElementById() liefert NULL zurück. Vielleicht existiert kein Element mit dieser ID?


----------



## SpiceLab (4. September 2010)

Die Attributswerte für *id, idref* und *name* dürfen keine Leerzeichen enthalten - also muß es im <iframe>-Tag richtigerweise *name="Tisch1"* und nicht *name="Tisch 1"*.

HTML-Attribut-Referenz für ID, IDREF oder Name


----------



## Schpringer (4. September 2010)

Hmm

Ich habe hier den Code des iframe:


```
<iframe src="http://www.snooker-4d.ch/static/livescore_table1.html" id="Tisch1" scrolling="no" frameborder="no" align="center" height = "160px" width = "500px">
</iframe>
```

unter id habe ich Tisch1 vergeben und auch im Javascript Tisch1 bei id eingegeben.

Habe ich da was übersehen? Oder muss ich gar das ganze hochladen, damit das funktioniert? Getestet habe ich es immer Lokal...


----------



## SpiceLab (4. September 2010)

Selbstverständlich muß das Script auf den Server geladen werden, wo auch die Seite abgelegt ist, ansonsten bleibt es auf deiner lokalen Platte wirkungslos.

Und zwischen dem vielen Ent- und Verwickeln auch mal den Browsercache leeren, und anschließend die Seite neu aufrufen


----------



## ComFreek (4. September 2010)

Eigentlich müsste es auch lokal funktionieren. Nutzt du das Baukastensystem online oder offline (lokal)?
Überprüfe nochmal, ob dieser Code wirklich in derselben Datei existiert, in der auch mein JS-Code drin ist.
Ändere mal den Code so ab:

```
var iframe;
window.onload = function()
{
  alert(document.getElementById("Tisch1"));
  //iframe = document.getElementById("Tisch1");
  //window.setInterval("RefreshIFrame()", 3000); // 60000 ms = 60 Sek.
}
function RefreshIFrame()
{
  //iframe.location.reload();
}
```


----------



## Schpringer (4. September 2010)

Hi, danke für deine Antwort

Die ids wurden inzwischen angepasst. An dem kann es leider nicht liegen...


----------



## ComFreek (4. September 2010)

@Schpringer: Hast du meinen Beitrag gelesen und ausprobiert?


----------



## SpiceLab (4. September 2010)

Du hast aber nicht im HTML-Code, dem bisher genutzten name-Attribut entsprechend, nun dreimal *id="Tisch1"* angegeben?

Solch ein ID-Bezeichner muß nämlich im Dokumentbaum eindeutig sein, darf darin also nur einmal vergeben werden, ansonsten verweigern die Browser die korrekte Ausführung des JavaScripts.


----------



## Schpringer (4. September 2010)

Das Baukastensystem benutze ich sowohl offline als auch online.

Damit wir uns richtig verstehen. Ich kann im Head einen Code eingeben, der dann in jeder html eingebettet wird. Somit auch in dieser, wo der iframe drin ist, oder? 

Nach änderung deines Code kommt diese Meldung:

[object HTMLIFrameElement]

und ich muss mit ok bestätigen.


----------



## Schpringer (4. September 2010)

spicelab hat gesagt.:


> Du hast aber nicht im HTML-Code, dem bisher genutzten name-Attribut entsprechend, nun dreimal *id="Tisch1"* angegeben?
> 
> Solch ein ID-Bezeichner muß nämlich im Dokumentbaum eindeutig sein, darf darin also nur einmal vergeben werden.


 
Also wir haben ja drei Tische. Für Tisch 1 habe ich Tisch1 angegeben, für Tisch2 id="Tisch2" usw..


----------



## Schpringer (4. September 2010)

Mir ist gerade etwas aufgefallen.

Schaut euch mal den Quelltext dieser Seite an:

http://www.snooker-4d.ch/livestream-summer-cup-2010/tisch-1/index.php

Die Eingaben, die "anscheinend" im Head sind, befinden sich in einem <div> element im <body>

Kann das einen Einfluss haben****


----------



## ComFreek (4. September 2010)

Schpringer hat gesagt.:


> Damit wir uns richtig verstehen. Ich kann im Head einen Code eingeben, der dann in jeder html eingebettet wird. Somit auch in dieser, wo der iframe drin ist, oder?


Achso ok. Das heißt, mein Skript sucht in jeder HTML-Datei nach dem IFrame mit der ID "Tisch1"?



Schpringer hat gesagt.:


> Nach änderung deines Code kommt diese Meldung:
> 
> [object HTMLIFrameElement]
> 
> und ich muss mit ok bestätigen.


Das ist eine gute Nachricht. Das heißt, dass das IFrame-Element gefunden wird.
Dann ändere nochmal den Code so ab:

```
var IFrameTisch1 = null;
window.onload = function()
{
  //alert(document.getElementById("Tisch1"));
  IFrameTisch1 = document.getElementById("Tisch1");
  window.setInterval("RefreshIFrame()", 3000);
}
function RefreshIFrame()
{
  IFrameTisch1.location.reload();
}
```
 
Wenn das nicht geht, dann versuche folgendes:

```
window.onload = function()
{
  window.setInterval("RefreshIFrame()", 3000);
}
function RefreshIFrame()
{
  document.getElementById("Tisch1").location.reload();
}
```


----------



## ComFreek (4. September 2010)

@Schpringer: Im Code finde ich überhaupt kein JavaScript


----------



## Schpringer (4. September 2010)

ComFreek hat gesagt.:


> @Schpringer: Im Code finde ich überhaupt kein JavaScript


 
Ach mein Fehler!! Ich habe es ja nur Lokal. Klar findest du es im Internet nicht..

Hier der Code (Nur der spezielle Teil):


```
<body>
<div id="logo"></div>
<div id="commontop">
<table border="0" cellspacing="0" cellpadding="0" height="16px" align="right">
<tr>
<td align="right" valign="top"><img src="http://www.tutorials.de/../images/pctle.gif" width="28" height="16" alt="" border="0"></td>
<td align="right" valign="top" bgcolor="#ffffff"><p class="small"><a class="small" href="http://www.tutorials.de/../sitemap.html">Sitemap</a>&nbsp;&nbsp;|&nbsp;&nbsp;</p><p class="small"><a class="small" href="http://www.tutorials.de/../archiv.html">Archiv</a>&nbsp;&nbsp;|&nbsp;&nbsp;</p><p class="small"><a class="small" href="http://www.tutorials.de/../impressum.html">Impressum</a>&nbsp;&nbsp;|&nbsp;&nbsp;</p></td>
</tr>
</table>
</div>

<div id="eyecatcher"></div>
<div id="eyecatchersmooth"></div>
<div id="eyecatchershade"></div>
<div id="eyecatchershade1"></div>
<div id="eyecatchershade2"></div>
<div id="eyecatchershade3"></div>
<div id="eyecatchershade4"></div>

<!-- Maintopic -->

<div id="menue"><ul><li><a class="maintopic" href="http://www.tutorials.de/../index.html">Home</a></li><li><a class="maintopic" href="http://www.tutorials.de/../ueber-uns/index.html">&Uuml;ber Uns</a></li><li><a class="maintopic" href="http://www.tutorials.de/../events/index.html">Events</a></li><li><a class="maintopic" href="http://www.tutorials.de/../pyramide/index.html">Pyramide</a></li><li><a class="maintopic" href="http://www.tutorials.de/../kontakt/index.php">Kontakt</a></li><li><a class="maintopic" href="http://www.tutorials.de/../media/index.html">Media</a></li><li><a class="maintopic" href="http://www.tutorials.de/../gaestebuch/index.php">G&auml;stebuch</a></li><li><a class="maintopic" href="http://www.tutorials.de/../downloads/index.php">Downloads</a></li><li><a class="maintopic" href="http://www.tutorials.de/index.html">Livestream Summer Cup 2010</a></li><!-- Topic -->

<li><a class="topicsel" href="./index.php">Tisch 1</a></li><!-- Subtopic -->

<li><a class="topic" href="http://www.tutorials.de/tisch2/index.php">Tisch 2</a></li><li><a class="topic" href="http://www.tutorials.de/tisch-3/index.php">Tisch 3</a></li><li><a class="topic" href="http://www.tutorials.de/highbreaks/index.html">Highbreaks</a></li></ul>

<div id="htmlheader">
<META NAME="oben" CONTENT="no-cache">
<script type="text/javascript">
var IFrameTisch1 = null;
window.onload = function()
{
  //alert(document.getElementById("Tisch1"));
  IFrameTisch1 = document.getElementById("Tisch1");
  window.setInterval("RefreshIFrame()", 3000);
}
function RefreshIFrame()
{
  IFrameTisch1.location.reload();
}
</script>
</div>
```

Bitte entschuldige. Das ist deine erste Variante. Stehen die 3000 immer noch für Millisekunden? Nicht das es funktionieren würde und es einfach zu lange dauert.


----------



## SpiceLab (4. September 2010)

ComFreek hat gesagt.:


> Dann ändere nochmal den Code so ab:
> 
> ```
> var IFrameTisch1 = null;
> ...


 
Du kannst hier noch so viele Varianten zum Versuch anpreisen, bsi ihr nicht mehr wißt, wo hinten und vorne ist 

Das Script kann bei ihm lokal schlichtweg nicht funktionieren, wenn sich die Seiten innerhalb der iFrames  nicht auf der lokalen Arbeitsumgebung befinden, sondern wie in Post #1 und #10 deutlich erkenntlich, auf dem Server liegen.

Die Fehlerkonsole im Browser Eures Vertrauens gibt hierüber eigentlich eine deutliche Auskunft, wenn man denn kurz inne hält, und ihr für einen kurzen Moment Aufmerksamkeit schenkt 



> Fehler: <http://www.xyz.de> wurde die Erlaubnis für den Aufruf der Methode Location.toString auf <file://> verweigert.


----------



## SpiceLab (4. September 2010)

Das Script wird hier weiterhin seine Arbeitsaufnahme verweigern, solange sich der HTML-Code der drei iFrames so darstellt:


```
<h2>Livescore Tisch 1</h2>
<iframe src="http://www.snooker-4d.ch/static/maxi/livescore_table1.html" name="Tisch 1" scrolling="no" frameborder="no" align="center" height = "120px" width = "350px">
</iframe>
<br/>
<h2>Livescore Tisch 2</h2>
<iframe src="http://www.snooker-4d.ch/static/maxi/livescore_table2.html" name="Tisch 1" scrolling="no" frameborder="no" align="center" height = "120px" width = "350px">
</iframe>
<br/>
<h2>Livescore Tisch 3</h2>
<iframe src="http://www.snooker-4d.ch/static/maxi/livescore_table3.html" name="Tisch 1" scrolling="no" frameborder="no" align="center" height = "120px" width = "350px">
</iframe>
```

Dort sind keine id-Attribute zu entdecken, dafür glänzt noch immer mein angesprochenes fehlerhafte Leerzeichen zwischen "Tisch" und "1" mit seiner regelwidrigen Anwesenheit.

Ich zieh dann mal weiter zu Tisch 4, wo leckere Schnittchen kredenzt werden


----------



## ComFreek (4. September 2010)

@Schpringer: Ja die stehen immer noch für die Millisekunden 
Ändere mal den Code so ab:

```
<script type="text/javascript">
function RefreshIFrame()
{
  document.getElementById("Tisch1").location.reload();
}
window.setInterval("RefreshIFrame()", 3000);
</script>
```
Jetzt lade diesen Code nochmal auf den Server und probiere es aus:

@spicelab:
Ich weiß, dass die Seiten im Internet liegen.

Wieso soll das nicht funktionieren? Hast du es ausprobiert?
Falls wirklich das der Fehler ist, dann bedanke ich mich bei dir für die Korrektur!


----------



## Schpringer (4. September 2010)

spicelab hat gesagt.:


> Das Script wird hier weiterhin seine Arbeitsaufnahme verweigern, solange sich der HTML-Code der drei iFrames so darstellt:
> 
> 
> ```
> ...



Das sind die iframes auf der Seite. Getestet wird es nur mit einem iframe. Der unter der Videoeinbindung. habe jetzt aber mal die anderen auch angepasst.


----------



## SpiceLab (4. September 2010)

ComFreek hat gesagt.:


> @spicelab:
> Ich weiß, dass die Seiten im Internet liegen.
> 
> Wieso soll das nicht funktionieren? Hast du es ausprobiert?


Wovon du ausgehen kannst - und zeitig vor dir   ;-)

Dann ist dir hier die Same Origin Policy für Javascript kein Begriff, der Hintergrund dir  nicht bekannt, dass hier die gleiche Herkunft (Domain, Server) der Dokumente gilt, und die  Voraussetzung ist, dass das Script vom Browser interpretiert / ausgeführt wird?


Same Origin Policy - Wiki
Same origin policy for JavaScript
Domänenübergreifende Vertrauensprobleme

Gegenüber der Windowsumgebung "file:///"  ist über das HTTP-Protokoll (http://localhost/) daran auch nichts zu drehen, solange die einzubindenen Seiten auf dem Server liegen, und von außen mit dem Script da was zu holen ist.


----------



## Schpringer (4. September 2010)

Hey Leute..

Vielen Dank für eure Hilfe. Nun ist es so, dass das ganze System heruntergefahren wurde, da die Gruppenphase durch ist. Kann es also nicht mehr testen, ob es geht.

Erst morgen in der Finalphase wieder. Darf ich mich morgen nochmals melden?

Habe nun den Code von dir hochgeladen und werde morgen sehen, ob es klappt.

Ich danke euch von ganzem Herzen für eure Hilfe. Es tut mir leid, dass ich so ein **** bin und keine Ahnung habe..

Vielleicht bis morgen.

Gruss an euch und Danke


----------



## SpiceLab (4. September 2010)

Schpringer hat gesagt.:


> Darf ich mich morgen nochmals melden?


Klaro 




Schpringer hat gesagt.:


> Ich danke euch von ganzem Herzen für eure Hilfe. Es tut mir leid, dass ich so ein **** bin und keine Ahnung habe..


Wenn die Menschen in allem Ahnung und Sachverstand besitzen, sind wir hier arbeitslos und können die Frührente beantragen


----------



## ComFreek (4. September 2010)

spicelab hat gesagt.:


> Wovon du ausgehen kannst - und zeitig vor dir   ;-)
> 
> Dann ist dir hier die Same Origin Policy für Javascript kein Begriff, der Hintergrund dir  nicht bekannt, dass hier die gleiche Herkunft (Domain, Server) der Dokumente gilt, und die  Voraussetzung ist, dass das Script vom Browser interpretiert / ausgeführt wird?
> 
> ...


 
Erstmal vielen Dank für den Text. Ich kenne bereits die "Same Origin Policy". (Habe mich mal mit AJAX beschäftigt).
Ich wusste aber nicht, dass das auch bei IFrames gilt. Ich dachte mir, dies gilt nicht, weil nicht direkt darauf zugegriffen wird(nur neugeladen), aber nunja das ist auch nicht erlaubt.
Nochmals Danke für die ganzen Links...


----------



## Schpringer (5. September 2010)

Hallo liebes Forum.

Bin wieder mal da... 

@ComFreek Habe den aktuellen Code von dir hochgeladen, da tut sich aber nix. 

Trotzdem vielen Dank für eure Hilfe.

Gruss


----------



## ComFreek (5. September 2010)

Kommen wieder Fehler in der Fehlerkonsole?

*Edit: Bei mir kommt alle 3 Sekunden folgender Fehler:*

```
Uncaught TypeError: Cannot call method 'reload' of undefined
```

Probier mal folgenden Code:

```
<script type="text/javascript">
function RefreshIFrame()
{
  document.getElementById("Tisch1").window.location.reload();
}
window.setInterval("RefreshIFrame()", 3000);
</script>
```


----------



## Quaese (5. September 2010)

Hi,

der Zugriff auf das window-Objekt ist in den Browsern unterschiedlich. Versuch es mal hiermit:

```
<script type="text/javascript">
function RefreshIFrame(){
  if(document.all && !window.opera)
    document.frames['Tisch1'].location.reload();
  else
    document.getElementById("Tisch1").contentWindow.location.reload();
}
window.setInterval("RefreshIFrame()", 3000);
</script>
```
Ciao
Quaese


----------



## ComFreek (5. September 2010)

@Quaese: Funktioniert, zumindest im Google Chrome!

*Edit: Funktioniert auch im IE, Safari, Opera und Firefox!*


----------



## Schpringer (5. September 2010)

ComFreek hat gesagt.:


> @Quaese: Funktioniert, zumindest im Google Chrome!
> 
> *Edit: Funktioniert auch im IE, Safari, Opera und Firefox!*


 
Hmmm.. Vielen Dank für eure Hilfe. Aber ich bin glaube ich zu doof.. Bei mir passiert einfach nix... Schade.. Aber trotzdem danke  Habs mit Butons gelöst.. Mal ne Zwischenlösung


----------



## ComFreek (5. September 2010)

@Schpringer: Passiert bei dir wirklich gar nichts? Eventuell liegt das an der Quelle des Frames.
Oder hast du wirklich den Code von Quaese übernommen?


PS: Wenn man immer auf die Buttons drücken muss, ist das auch doof.


----------



## Sven Mintel (5. September 2010)

Moin,

ich habe das mal überflogen, und keine eindeutige Info darüber gefunden, ob nun das Problem mit den unterschiedlichen Domains beseitigt ist.
Für den Fall, dass es nicht beseitigt werden *kann*, hier ein anderer Lösungsansatz:
Die Same Origin Policy kommt ja zum tragen, wenn Dokument von Domain A auf ein Dokument von Domain B zugreifen will.

Man muss die Sache also irgendwie reloaden, ohne auf das Dokument zuzugreifen. 

Wie das gehen kann....kurzer Beispielcode:
	
	
	



```
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; 
                                charset=ISO-8859-1"   />
<meta name="author"             content="doktormolle" />
<meta name="date"               content="2010-09-03" />
<title>Test</title>
<script type="text/javascript">
<!--
function reloadFrame(frameElement)
{
  frameElement.parentNode.replaceChild(frameElement.cloneNode(true),frameElement);
}
window.onload=function(){
  setInterval(function(){reloadFrame(document.getElementsByTagName('iframe')[0]);},5000);
}
//-->
</script>
</head>
<body>
<iframe src="http://doktormolle.de/temp/365897/" width="200" height="80"></iframe>
</body>
</html>
```

Das Dokument im iFrame wird nicht angefasst, es wird lediglich das aktuelle iFrame-Element durch eine Kopie seiner selbst ersetzt, der Nebeneffekt: das Dokument im iFrame wird neu geladen 

Beachtet, dass ich von *Element* spreche. Es ist also das DOM-Element-Objekt <iframe> gemeint, und nicht das window-Objekt, welches das iFrame ja auch ist.


----------



## Schpringer (5. September 2010)

@ComFreek Ja es passiert tatsächlich nichts. Ich habe den Code von Quaese übernommen.. 

@ Sven Mintel Wie baue ich nun den Code am besten ein? Kann ich einfach Den Script Bereich übernehmen und das "iframe" durch die ID des iframes ersetzen? Muss ich die Meta daten auch übernehmen? 

Vielen Dank euch beiden. 

EDIT: @ Sven Mintel Schein zu funktionieren  Kann ich auch mehrere iframes auf einer Seite ansteuern? Oder werden automatisch alle neu geladen?


----------



## Sven Mintel (5. September 2010)

Schpringer hat gesagt.:


> EDIT: @ Sven Mintel Schein zu funktionieren  Kann ich auch mehrere iframes auf einer Seite ansteuern? Oder werden automatisch alle neu geladen?



Du kannst die Funktion reloadFrame() so oft aufrufen, wie du willst.
Als Parameter erwartet sie das <iframe> als Element-Objekt, also z.B.

*document.getElementById('Tisch1')
document.getElementById('Tisch5')*
oder aber auch 
*document.getElementsByTagName('iframe')[0]
*..oder sonstige Methoden/Member, die ein Element-Objekt zurückliefern(node.nextSibling,document.getElementsByName,node.lastChild usw.)


----------



## Schpringer (5. September 2010)

Cool  Vielen Dank für deine Hilfe 

Auch dir ComFreek für deine Bemühungen. 

Ich schätze das sehr, dass es so hilfsbereite Menschen gibt. Nun ist das Turnier zwar gleich vorbei, aber es kommt noch eines im Oktober. Dann läuft es von Anfang an richtig 

Nochmals danke euch 

Gruss aus der Schweiz


----------



## miguel778 (26. August 2019)

Hallo, ist zwar schon ein sehr altes Thema, aber für mich heute sehr relevant. 

Mein IFrame aktualisiert sich zwar alle 3 Sekunden aber das ständige aufflackern ist unpassend - gibt es da eine andere Möglichkeit das IFrame zu aktualisieren ohne, dass es derart "stört" ?  

Was die Auswahl der Browser angeht, bin ich frei, d.h. mit dem wo es am besten geht, würde ich es auch nutzen.  

Für jede Hilfe bedanke ich mich jetzt schon mal !

Grüsse
MM


----------



## Sempervivum (26. August 2019)

Eine Möglichkeit wäre, zwei iFrames zu verwenden und den, der gerade neu geladen wird, zu verbergen. Dann auf das onload-Event horchen und, wenn das Laden fertig ist, den neuen sichtbar machen und den alten verbergen.


----------



## basti1012 (26. August 2019)

Du schreibst das der iframe alle 3 Sekunden neu geladen wird.
Wo wird der den neu geladen ?  Auf der Seite wo der <iframe src=""></iframe> Code steht, oder bei der  Seite  die da eingebunden  wird.?.

Wichtig ist es ja vieleicht auch zu wissen ob der Inhalt Fremd ist oder von deiner eigener Seite , weil bei der eigene Seite hat man mehrere möglichkeiten , bzw auch andere möglichkeiten


----------



## miguel778 (26. August 2019)

Sempervivum hat gesagt.:


> Eine Möglichkeit wäre, zwei iFrames zu verwenden und den, der gerade neu geladen wird, zu verbergen. Dann auf das onload-Event horchen und, wenn das Laden fertig ist, den neuen sichtbar machen und den alten verbergen.



Wenn das funktioniert , wäre es super ! Gibt´s dazu irgendwo ein Beispiel-Demo ?


----------



## miguel778 (26. August 2019)

basti1012 hat gesagt.:


> Du schreibst das der iframe alle 3 Sekunden neu geladen wird.
> Wo wird der den neu geladen ?  Auf der Seite wo der <iframe src=""></iframe> Code steht, oder bei der  Seite  die da eingebunden  wird.?.
> 
> 
> Wichtig ist es ja vieleicht auch zu wissen ob der Inhalt Fremd ist oder von deiner eigener Seite , weil bei der eigene Seite hat man mehrere möglichkeiten , bzw auch andere möglichkeiten




In Raum#1 steht ein Display wo die Änderungen vorgenommen werden - in Raum#2 ein Display wo lediglich die Anzeige jedesmal aktualisiert werden soll, d.h. am Display Raum#2 ist die Seite mit dem iframe.


Ja, es handelt sich tatsächlich um eigene Seite.


----------



## Sempervivum (26. August 2019)

Könnte etwas so aussehen:

```
<style>
        iframe.noflicker:not(.active) {
            display: none
        }
    </style>
    <iframe class="noflicker active" src="https:domain.de?time=0"></iframe>
    <iframe class="noflicker" src="https:domain.de?time=0"></iframe>
    <script>
        var iframes = document.querySelectorAll('iframe.noflicker');
        for (var i = 0; i < iframes.length; i++) {
            iframes[i].classList.add('firstload');
            iframes[i].addEventListener('load', function () {
                if (this.classList.contains('firstload')) {
                    this.classList.remove('firstload');
                } else {
                    var active = document.querySelector('iframe.noflicker.active');
                    var notactive = document.querySelector('iframe.noflicker:not(.active)');
                    active.classList.remove('active');
                    notactive.classList.add('active');
                }
            });
        }
        setInterval(function () {
            var newURL = document.querySelector('iframe.noflicker.active').src
                .replace(/\?time=[\d]+$/, '?time=' + Date.now());
            document.querySelector('iframe.noflicker:not(.active)').src = newURL;
        }, 3000);
    </script>
```


----------



## miguel778 (27. August 2019)

Sempervivum hat gesagt.:


> Könnte etwas so aussehen:
> 
> ```
> <style>
> ...



Schon mal grossen Dank dafür !  

Ich habe den Code getestet doch entweder mach ich etwas falsch oder ...   das Flackern ist noch immer da und irgendwie werden die Inhalte verschoben, nach dem refresh (siehe Anhang)


----------



## Sempervivum (27. August 2019)

Ist das mattblaue und das pinke jeweils ein iFrame? Mein Code funktioniert so zunächst mal nicht für mehrere iFrames. Wenn man es für mehrere iFrames erweitern will, müsste um ein Päärchen jeweils ein Container sein. Oder ist der ganze Kalender *ein* iFrame?


----------



## miguel778 (27. August 2019)

der gesamte Kalender ist ein Frame


----------



## Sempervivum (27. August 2019)

Und wie lautet die URL der Seite, die im iFrame angezeigt wird? Gibt es da vielleicht schon einen URL-Parameter time?


----------

