Gibt es eine Möglichkeit zu bestimmen, ob ein Bildpfad zu einem tatsächlichen Bild führt, dh zu erkennen, wenn ein Bild nicht in Javascript geladen werden kann.
Für eine Web-App analysiere ich eine XML-Datei und erstelle dynamisch HTML-Bilder aus einer Liste von Bildpfaden. Einige Bildpfade sind möglicherweise nicht mehr auf dem Server vorhanden, daher möchte ich ordnungsgemäß fehlschlagen, indem ich erkenne, welche Bilder nicht geladen werden können, und dieses HTML-img-Element lösche.
Hinweis JQuery-Lösungen können nicht verwendet werden (der Chef möchte JQuery nicht verwenden, ja, ich weiß, dass ich nicht damit anfangen kann). Ich kenne eine Möglichkeit in JQuery zu erkennen, wann ein Bild geladen wird, aber nicht, ob es fehlgeschlagen ist.
Mein Code zum Erstellen von IMG-Elementen, aber wie kann ich feststellen, ob der IMG-Pfad zu einem fehlgeschlagenen Laden des Bildes führt?
var imgObj = new Image(); // document.createElement("img");
imgObj.src = src;
quelle
Antworten:
Sie können den folgenden Code ausprobieren. Ich kann jedoch nicht für die Browserkompatibilität bürgen, daher müssen Sie dies testen.
Und mein Mitgefühl für den jQuery-resistenten Chef!
quelle
Die Antwort ist nett, bringt aber ein Problem mit sich. Wann immer Sie
onload
oderonerror
direkt zuweisen , kann es den zuvor zugewiesenen Rückruf ersetzen. Aus diesem Grund gibt es eine nette Methode, die "den angegebenen Listener auf dem EventTarget registriert, auf dem er aufgerufen wird", wie es auf MDN heißt . Sie können so viele Listener registrieren, wie Sie möchten.Lassen Sie mich die Antwort ein wenig umschreiben.
Da der Prozess zum Laden externer Ressourcen asynchron ist, wäre es noch besser, modernes JavaScript mit Versprechungen wie den folgenden zu verwenden.
quelle
Dies:
quelle
<img src="your/path/that/might/fail.png" onerror="$(this).hide();"/>
quelle
jQuery + CSS für img
Mit jQuery funktioniert das bei mir:
Und ich kann dieses Bild überall auf meiner Website verwenden, unabhängig von der Größe mit der folgenden CSS3-Eigenschaft:
CSS nur für Hintergrund-Img
Für fehlende Hintergrundbilder habe ich außerdem zu jeder
background-image
Deklaration Folgendes hinzugefügt :Apache-Serverseite
Eine andere Lösung besteht darin, fehlende Bilder mit Apache zu erkennen, bevor sie an den Browser gesendet und durch den Standardinhalt no-img.png ersetzt werden.
quelle
Hier ist eine Funktion, die ich für eine andere Antwort geschrieben habe: Javascript Image Url Verify . Ich weiß nicht , ob es genau das, was man braucht, aber es nutzt die verschiedenen Techniken , die Sie verwenden würden , die Handler für enthalten
onload
,onerror
,onabort
und eine allgemeine Timeout.Da das Laden von Bildern asynchron ist, rufen Sie diese Funktion mit Ihrem Bild auf und rufen später Ihren Rückruf mit dem Ergebnis auf.
quelle
genau wie unten:
quelle