Supportnet Computer
Planet of Tech

Supportnet / Forum / Webseiten/HTML

Neuladen von Grafiken erzwingen





Frage

Hi! Ich habe eine Seite mit einer Liste von Namen. Per JavaScript lasse ich in einem definierten Bereich der Seite eine Miniaturansicht eines Fotos der Person anzeigen. Leider habe ich jetzt das Problem, dass wenn ich ein Bild aktualisiere, der Browser trotzdem die alte Version aus dem Cache anzeigt. Lässt es sich irgendwie bewerkstelligen, dass man den Browser zwingt bei jedem Abruf der Seite die Bilder komplett neu von der Seite zu holen und die alten aus dem Cache zu löschen? PS: Die Bilder werden über ein PHP-Skript mittels entspr. Formluar hochgeladen. Das Umbenennen der Grafiken ist leider nicht ohne weiteres möglich, da ich den Namen der Grafik anhand des Index aus einer Datenbank, die die anzugeigende Liste enthält, ermittle. Ich hoffe, das war verständlich. :) Danke schonmal im Vorraus.

Antwort 1 von Redschina

hi thomas,

dürfte (zumindest bei html) reichen, wenn du in den header der html-seite einbaust:

<meta http-equiv="expires" content="0">

das "content="0" steht dafür, dass die seite nicht aus dem cache, sondern sofort neu aufgebaut wird. beim IE (zumindest bei mir) funzt das auch! ich hoffe, das war verständlich ;-) mit php und js hab ich leider (noch) nix am hut - aber du hast unter "webseiten und html" gepostet...

gruss, redschina

Antwort 2 von thomasn1975

Hmmmm. Funktioniert bei mir leider nicht. SelfHTML sagt zu diesem Meta-Tag, dass es sich auf die aktuelle HTML-Seite bezieht. Scheint also nicht für darauf befindliche Grafiken zu gelten.

@redschina: Ok, es gibt noch "VBScript/Javascript". Nun stehts hier und nen Doppelpost mach ich net!

Antwort 3 von Redschina

hi thomas,

das mit dem "in welcher rubrik posten" war auch nur ne ausrede von mir, weil ichs eben bei javascript und php ned weiss, also bitte ned zu eng sehen ;-)

egal, was nun selfhtml sagt, mit diesem code baut es bei mir die seite incl. "neuer" bilder auf - was netscape und mozilla bzw. opera machen, weiss ich leider ned mangels "masse" - im ie funzt das jedenfalls incl. jeglicher bilder, java-applets etc., sonst hätt ich das hier ned gepostet.
hast du es auch "trotz" selfhtml schon mal versucht? meine seiten sind völlig gemischt mit html, javascripts, applets etc. und es funzt halt :-)

nochn gruss, redschina

Antwort 4 von thomasn1975

@Redschina:

Ja, natürlich habe ich das versucht. Habe sogar im Internet dazu noch ein paar MetaTags mehr gefunden, die aber leider alle nicht funktionieren. Ich sehe schon, ich werde die Datenbank umbauen müssen, damit jedes (neue) Bild seinen eigenen eindeutigen Dateinamen bekommt. :/

Aber trotzdem vielen Dank für den (für diesen Fall leider nicht hilfreichen) Hinweis.

Schüssi! Thomas

Antwort 5 von jksd1977

Hallo, eine Lösung mit extra Anzeigefenster hat bei mir funktioniert.

Man könnte in einer php-Datei in etwa folgendes machen:

// Eine Javascript-Funktion, die ein eigenes
// Browser unabhängiges Html-Fenster aufmacht.
// Es wird die Html-Seite geladen, die über "url"
// übergeben wird.
// cx und cy sind die x und y Pixelwerte der Grafik,
// die auf dieser Html-Seite angezeigt werden soll.
// F.resizeTo ... bewirkt dann die richtige Größe des
// Fensters
// Und F.location.reload ... bewirkt das Neuladen
// des Fensterinhalts
<script language "javascript">
function Anzeigen( url, cx, cy)
{
F = window.open( url, ´ Bildfenster ´ , ´ width=10, height=10, screenX=60, screenY=90 ´ );
F.resizeTo( cx+20, cy+20);
F.location.reload( );
F.focus( );
}
</script>

// mit php kann man eine html-Datei schreiben,
// die dann später an die Funktion ´Anzeigen´ als
// url - Parameter übergeben werden kann.
<script language = "php">
function SchreibeBildanzeigeInHtml( $Dateiname)
{
// html-Datei neu anlegen bzw. überschreiben
// Hier wird die Datei in den Ordner ´ dyn_html ´
// geschrieben, der Schreibrechte für alle haben sollte
$fp = fopen( "./dyn_html/bildanzeigen.html","w");

// damit die Datei bei weiteren Aufrufen wieder
// überschrieben werden kann
chmod( "./dyn_html/bildanzeigen.html", 0666);

// nun die Html-Tags in die Datei schreiben
fputs( $fp, "<html>\n");
fputs( $fp, "<header>\n");
fputs( $fp, "<title>bildanzeigen.html</title>\n");

// Anweisung an den Browser den Inhalt der Seite
// nicht zu cachen, geht bei Bilder aber nicht immer
fputs( $fp, "<meta http_equiv=\"pragma\" content=\"no-cache\">\n");

// Anweisung an den Browser die Seite auf jeden Fall
// neu vom Server zu laden, geht bei Bilder auch nicht
// immer
fputs( $fp, "<meta http-equiv=\"expires\" content=\"0\">\n");

fputs( $fp, "</header>\n");
fputs( $fp, "<body>\n");

// Verzeichnis angeben, wo das Bild liegt
// $Dateiname beinhaltet den Dateinamen des Bildes;
// Bildgröße ermitteln
$size = getImageSize( "../bilder/php_haendler/$Dateiname");

// Bild anzeigen
fputs( $fp, "<img src=\"../../bilder/php_haendler/$Dateiname\" $size[3]>\n");

fputs( $fp, "</body>\n");
fputs( $fp, "</html>\n");
fclose( $fp);
} // Funktion Ende

// ruft man die obige Funktion auf
// und übergibt als Parameter den Dateinamen des
// Bildes, so wird die datei ´ bildanzeigen.html´ hier
// im Verzeichnis ´ ./dyn_html ´ angelegt.
$Dateiname = "Briefmarke.jpg";
SchreibeBildanzeigeInHtml( $Dateiname);

// Nun nochmal Bildmaße ermitteln für den Aufruf der
// javascript-Funktion ´ Anzeigen´
$size = getImageSize( "../bilder/php_haendler
$Dateiname");

// Ein link dieser Art öffnet nun das separate Fenster,
// zeigt zuerst kurz das Bild aus dem Cache an, falls
// der Browser es gecacht hat, und lädt dann die Grafik
// nach dem Aufbau des Fensters neu - aufgrund der
// Anweisung F.location.reload( ) in der Funktion
// ´ Anzeigen ´
echo "<a href=\"javascript:Anzeigen( ´ ./dyn_html/bildanzeigen.html ´ , $size[0] , $size[1])\">$Dateiname</a>\n";

Ich hoffe man kann mit dem Prinzip etwas anfangen und weiterhin cool bleiben ;)

Antwort 6 von rfb

Wow, eine Lösung schon nach 2 Jahren

Aber, was ist ein
Zitat:
Browser unabhängiges Html-Fenster
(außer ein Widerspruch in sich selbst)

Antwort 7 von jksd1977

Hallo nochmal,
wer auch ohne die Tags:
<meta http_equiv=\"pragma\" content=\"no-cache\">
und
<meta http-equiv=\"expires\" content=\"0\">
auskommt, der kann sich die Funktion:
´function SchreibeBildanzeigeInHtml( $Dateiname) ´
ganz ersparen.
Man kann der Javascript-Funktion ´Anzeigen´ auch einfach den Dateinamen (z.B ..bilder/test.jpg) als Parameter ( für ´url´) übergeben und es funktioniert
auch.

Viel Spaß!

PS: ein Popupfenster habe ich gemeint ;) - hebt sich irgendwie vom Browserhauptfenster ab...

Antwort 8 von rfb

nach genauerem Ansehen deines Codes:
wo ist eigentlich der Unterschied deiner Lösung zu der von Redschina aus dem Jahre 2003?

Soweit ich das sehe nutzt du PHP nur um eine HTML-Datei zu generieren, die dann das Bild beinhaltet und ein paar meta-tags (und ob die funktionieren wurde schon damals in Frage gestellt). Nach wie vor bekommt der Browser die Anweisung eine Datei mit gleichem Namen und Pfad zu laden - und dann greift er eben in den nächsten Cache.

Der Ausweg, den thomasn1975 damals erwog, bei jeder Bild-Änderung den Dateinamen zu ändern, dürfte eher zum Erfolg führen. Dies kann dann natürlich dynamisch über serverseitige Scripte erfolgen.

Antwort 9 von jksd

Hi, also ich hab den netscape 4.0 und bei mir geht´s.
Mir ist es auch ein bisschen zu viel mich genauer mit der Sache auseinander zu setzen.
Danke trotzdem für deinen Hinzweis und finde es überauslustig, daß dieser Beitrag wieder aufgelebt ist.
Was nicht meine Absicht war. Wollte eigentlich nur eine Lösung für Leute posten, die so wie ich im Google ein Stichwort eingeben - und dann reinlesen.

also dann Viel Spaß

PS: Heute hab ich in ein Javascriptbuch hineingelesen und in andere Bücher zum Interneit - ganz schön Umfangreich, naja bin sowieso eher selfhtml-typ;)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: