Werner Honkomp: Frage zum Wiki-Artikel ‚Aktive Inhalte einbinden‘

Auf der Startseite von http://fak-om.de/ ist ein Text mit Bild eingebaut, der über einen iframe eingebunden wurde. Dies ist erforderlich, da dieser Frame-Inhalt von einer dritten Person gepflegt wird. Das Problem ist dabei, dass diese Frame-Seite generell aus dem Browser-Cache geladen wird und sich auch nicht über den Reload-Button aktualisieren läßt. Ich möchte erreichen, dass diese Frame-Seite generell vom Server neu geladen wird und habe dazu folgenden Script in die iframe-Zeile eigebaut:

<iframe name="I1" src="http://fak-om.de/templates/Datenbank-Startseite.htm" border="0" frameborder="0" marginwidth="0" marginheight="0" height="570" width="770" javascript:I1.location.reload(true)>

Leider funktioniert das so nicht. Kennt jemand eine andere Lösung?

Werner Honkomp

  1. Moin!

    <iframe name="I1" src="http://fak-om.de/templates/Datenbank-Startseite.htm" border="0" frameborder="0" marginwidth="0" marginheight="0" height="570" width="770" javascript:I1.location.reload(true)>

    Leider funktioniert das so nicht. Kennt jemand eine andere Lösung?

    Unsaubere Lösung:

    Man kann das Neuladen mit dem Hammer erzwingen in dem man als Parameter einen zufälligen Wert übergibt.

    <h1>foo</h1>
    <script>
    document.write('<iframe name="I1" src="http://fak-om.de/templates/Datenbank-Startseite.htm?' + Math.random() + '" border="0" frameborder="0" marginwidth="0" marginheight="0" height="570" width="770">');
    </script>
    

    oder mit php:

    <h1>foo</h1>
    
    <iframe name="I1" src="http://fak-om.de/templates/Datenbank-Startseite.htm?<?php echo rand(0, 999999999); ?>" border="0" frameborder="0" marginwidth="0" marginheight="0" height="570" width="770">
    

    Dazu müsstest Du die Datei aber mit der Endung .php versehen. Selbstverständlich kann man statt des Zufallswertes auch einen Zeitstempel, z.B. die seit dem 1.1.1970 00:00:00 vergangenen Sekunden, senden.

    Fast richtige Methode:

    Man konfiguriere den Server so, dass das Cachen richtig funktioniert. Und da sehe ich folgendes:

    fastix@trainer:~$ wget -d --delete-after http://fak-om.de/templates/Datenbank-Startseite.htm
    Setting --delete-after (deleteafter) to 1
    DEBUG output created by Wget 1.15 on linux-gnu.
    
    URI encoding = »UTF-8«
    --2016-01-27 12:46:32--  http://fak-om.de/templates/Datenbank-Startseite.htm
    Auflösen des Hostnamen »fak-om.de (fak-om.de)«... 81.169.145.158, 2a01:238:20a:202:1158::
    Caching fak-om.de => 81.169.145.158 2a01:238:20a:202:1158::
    Verbindungsaufbau zu fak-om.de (fak-om.de)|81.169.145.158|:80... verbunden.
    Created socket 3.
    Releasing 0x0000000001070240 (new refcount 1).
    
    ---request begin---
    GET /templates/Datenbank-Startseite.htm HTTP/1.1
    User-Agent: Mozilla/5.0 (Windows rv:32.0) Gecko/20100101 Firefox/32.0
    Accept: */*
    Host: fak-om.de
    Connection: Keep-Alive
    
    ---request end---
    HTTP-Anforderung gesendet, warte auf Antwort...
    ---response begin---
    HTTP/1.1 200 OK
    Date: Wed, 27 Jan 2016 11:46:32 GMT
    Server: Apache/2.2.31 (Unix)
    Last-Modified: Wed, 27 Jan 2016 10:48:31 GMT
    ETag: "94deaee-28c8-52a4e8afee69f"
    Accept-Ranges: bytes
    Content-Length: 10440
    Keep-Alive: timeout=3, max=100
    Connection: Keep-Alive
    Content-Type: text/html
    ---response end--- 
    

    Und das sieht eigentlich gut aus. ETag wird gesendet und Last-Modified scheint zu stimmen. Um das Verhalten kontrollieren zu können müsste man die Ressource ändern...

    Noch besser:

    Übrigens ist der Weg mit dem IFrame "eher sehr ungünstig". Das wirst Du merken wenn der Inhalt nicht (mehr) passt. Auch werden zu viele Requests erzeugt, was den Seitenaufbau stark verlangsamt.

    Wenn Du etwas wie php benutzen kannst informiere Dich über die Möglichkeiten, Dateien einzulesen und auszugeben:

    <h1>Tolle Seite</h1>
    <?php
    readfile ($_SERVER['DOCUMENT_ROOT'] . '/templates/Datenbank-Startseite.htm');
    ?>
    

    Jörg Reinholz

    1. Vielen Dank für die aufgezeichten Möglichkeiten. Auf dem Server habe ich keinen Einfluss, der steht bei Strato. Aber die anderen Vorschläge werde ich mal prüfen.

      Vielen Dank nochmal und einen schönen Tag, Werner Honkomp

      Moin!

      <iframe name="I1" src="http://fak-om.de/templates/Datenbank-Startseite.htm" border="0" frameborder="0" marginwidth="0" marginheight="0" height="570" width="770" javascript:I1.location.reload(true)>

      Leider funktioniert das so nicht. Kennt jemand eine andere Lösung?

      Unsaubere Lösung:

      Man kann das Neuladen mit dem Hammer erzwingen in dem man als Parameter einen zufälligen Wert übergibt.

      <h1>foo</h1>
      <script>
      document.write('<iframe name="I1" src="http://fak-om.de/templates/Datenbank-Startseite.htm?' + Math.random() + '" border="0" frameborder="0" marginwidth="0" marginheight="0" height="570" width="770">');
      </script>
      

      oder mit php:

      <h1>foo</h1>
      
      <iframe name="I1" src="http://fak-om.de/templates/Datenbank-Startseite.htm?<?php echo rand(0, 999999999); ?>" border="0" frameborder="0" marginwidth="0" marginheight="0" height="570" width="770">
      

      Dazu müsstest Du die Datei aber mit der Endung .php versehen. Selbstverständlich kann man statt des Zufallswertes auch einen Zeitstempel, z.B. die seit dem 1.1.1970 00:00:00 vergangenen Sekunden, senden.

    2. Mag vielleicht unsauber sein, aber dieser Vorschlag erfüllt seinen Zweck:

      <iframe name="I1" src="http://fak-om.de/templates/Datenbank-Startseite.htm?' + Math.random() + '" border="0" frameborder="0" marginwidth="0" marginheight="0" height="570" width="770">')
      

      Vielen Dank nochmal, Werner Honkomp