Javascript Crossbrowser neues Image ()

8

Was ist falsch an dieser Funktion? Es funktioniert in Opera und Firefox, funktioniert aber nicht unter Safari unter Windows

%Vor%

wenn ich versuche, getImage (' Ссылка ') Dieses Bild wurde nicht geladen (da einige servlet.gif alle Anfragen protokolliert) Es funktioniert in Opera und Firefox, aber nicht in Safari. Ich habe versucht "neues Image ()" und "document.createElement ('img')" - das gleiche Ergebnis.

========== UPDATE: Funktion funktioniert gut, wenn es direkt aufgerufen wird, Problem beginnt, wenn es von Ereignis-Listener

aufgerufen wird %Vor%

"local" Link funktioniert gut in Firefox, Opera und Safari (aber Safari zeigt alert1, alert2 und dann alarm mit "src" aus irgendeinem Grund, während andere Browser alert1, alertSrc, alert2)

zeigen

"Google" Link Opera, Firefox - funktioniert gut (alert1, alertSrc, alert2), aber Safari zeigt nicht - alertSrc. In Safari sehen Sie alert1, alert2 und das ist alles. Servlet "/pic/img.gif" erhält keine Anfrage, wenn jemand auf "Google" Link von Safari klickt.

Was ist das Problem, wie man es löst?

Danke.

    
Zelid 06.08.2009, 12:30
quelle

4 Antworten

10

Mein erster Eindruck ist, dass Sie in Browsern auf einen Optimierungscode gestoßen sind, der das Laden von Bildern verhindert, die nicht angezeigt werden. So weit:

Safari 4.0.2 (530.19.1):

  • funktioniert für mich wie beschrieben (sowohl lokal, Google, als auch wenn ich das Ereignis in Mouseover änderte)
  • Reihenfolge der Warnungen ist alert1, alarmsrc, alert2

Firefox Nightly (3.5.3pre, 20090805):

  • funktioniert wie beschrieben. Komisch, da es zuerst nicht funktioniert hat. Versuchen Sie, das Bild in Ihren Cache zu laden, um zu sehen, ob es den Test beeinflusst.
  • Reihenfolge der Warnungen ist alert1, und dann alertsrc und alert2 zur gleichen Zeit (bewegen Sie den Dialog, um beide zu sehen)

Google Chrome (2.0.172.39):

  • funktioniert wie in Safari, obwohl Mouseover scheinbar zu viele Ereignisse auslöst
  • Reihenfolge der Warnungen ist alert1, alert2, alarmsrc

Internet Explorer (7.0.6001.18000)

  • funktioniert wie beschrieben (sowohl lokal als auch google und wenn in mouseover geändert)
  • Reihenfolge der Warnungen ist alert1, alarmsrc, alert2

Beachten Sie, dass ich den Bildstandort in Ссылка geändert habe, da ich keine Zufallszahlen habe Bildskript läuft gerade. Basierend darauf würde ich vorschlagen, einen Test mit verschiedenen Bildern durchzuführen und nicht vorhandene Bilder, Bilder in Ihrem Cache, Bilder, die sich nicht im Cache befinden, auszuprobieren.

Der Grund dafür, dass die Warnmeldungen nicht unbedingt in der richtigen Reihenfolge sind, besteht darin, dass verschiedene Browser Bilder in verschiedenen Reihenfolgen laden und der alertsrc erst dann erfolgt, nachdem das Bild geladen wurde. Ein guter Test, ob ein Bild geladen ist oder nicht, ist, wenn die Breite 0 ist.

    
SEK 07.08.2009, 09:29
quelle
6

Ich denke, es ist ein Cache-Problem.
Wenn Sie sagen, image.src = url; javascript geht sofort zum Abrufen des Bildes, und wenn das Bild zwischengespeichert wird, dann verwendet der Browser nur den zwischengespeicherten und löst den Onload aus, und Sie sagen image.onload = function() {}; , aber onload hat bereits ausgelöst, also function() wird niemals aufgerufen.

Wie auch immer, das ist alles nur meine Spekulation, ich bin mir nicht sicher, ob ich recht habe. Wenn ich jedoch Recht habe, sollten Sie es beheben können, indem Sie image.src = url; unter image.onload = function() {};

verschieben     
BigName 30.09.2010 13:59
quelle
2

Probieren Sie dieses Beispiel in IE und Safary und funktioniert perfekt.

%Vor%     
andres descalzo 06.08.2009 12:44
quelle
0

Der einzige Weg, wie ich es nicht im IE zum Laufen bringen konnte, war new Image () und nicht document.createElement . Das war reparierbar, indem man image.src nach deiner onload-Funktion bewegte:

%Vor%     
Ian Oxley 06.08.2009 13:01
quelle

Tags und Links