événement onerror utilisant background: url()

Existe-t-il un moyen d'afficher une autre image si l'image source n'est pas trouvée? Je sais que pour accomplir cela, c'est en faisant quelque chose comme ci-dessous:

<img src="imagenotfound.gif" alt="Image not found" onError="this.src='imagefound.gif';" />

, Mais que diriez-vous si vous faites quelque chose comme cela, comment pouvez-vous attraper si il y a une erreur ou si l'image n'est pas trouvé?

<div style="background:url('myimage.gif')"></div>
23
demandé sur Bono 2014-03-10 00:07:38

3 réponses

Dans le cas où myimage.gif n'est pas transparent, vous pouvez utiliser plusieurs arrière-plans:

background: url('myimage.gif'), url('fallback.gif');

De Cette façon, fallback.gif ne sera visible que si myimage.gif n'est pas disponible.

Remarque que fallback.gif peut être téléchargé, même si myimage.gif est disponible.


Alternativement, même si elles ne sont pas largement prises en charge, css Images 3 introduit la notation image() :

background: image('myimage.gif', 'fallback.gif');

Multiples <image-decl>s peut être donné séparés par des virgules, dans la fonction représente la première image qui n'est pas un image non valide .

73
répondu Oriol 2016-06-29 20:40:05

Avec les images d'arrière-plan, il n'y a pas d'événement; vous devez vérifier vous-même.

Faites une requête HTTP (XML) , et si vous obtenez une réponse avec un code d'état d'erreur ou aucune réponse (après le délai d'attente), utilisez une autre ressource d'image. Cette approche est limitée par la Politique de même origine .

3
répondu PointedEars 2014-03-09 20:30:08

Vous pouvez également utiliser une image factice et utiliser l'événement onerror à partir de là ...

        $imageFoo = '
        <div id="' . $uniqueId . '"
             style="
                background-image: url(//foo.lall/image.png);
                -webkit-background-size: contain;
                -moz-background-size: contain;
                -o-background-size: contain;
                background-size: contain;
                background-position: center;
                background-repeat: no-repeat;
             "
        ></div>
        <!-- this is a helper, only needed because "background-image" did not fire a "onerror" event -->
        <img style="display: none;" 
             src="//foo.lall/image.png" 
             onerror="var fallbackImages = $(this).data(\'404-fallback\'); $(\'#' . $uniqueId . '\').css(\'background-image\', \'url(\' + fallbackImages + \')\');"
             data-404-fallback="//foo.lall/image_fallback.png"
        >
        ';
0
répondu Lars Moelleken 2018-08-29 08:53:17