событие onerror с использованием фона: url()
есть ли способ показать альтернативное изображение, если исходное изображение не найдено? Я знаю, что для этого нужно сделать что-то вроде ниже:
<img src="imagenotfound.gif" alt="Image not found" onError="this.src='imagefound.gif';" />
но как насчет того, если вы делаете что-то подобное, как вы можете поймать, если есть ошибка или если изображение не найдено?
<div style="background:url('myimage.gif')"></div>
3 ответов
в случае myimage.gif
не является прозрачным, вы можете использовать несколько фонов:
background: url('myimage.gif'), url('fallback.gif');
таким образом fallback.gif
будет видно только если myimage.gif
не имеется.
отметим, что fallback.gif
может быть загружен даже если myimage.gif
доступно.
альтернативно, хотя и не широко поддерживается, CSS Images 3 вводит на image()
обозначение:
background: image('myimage.gif', 'fallback.gif');
несколько
<image-decl>s
можно дать разделенные запятыми, в в каком случае функция представляет первое изображение, которое не является недопустимый образ.
с фоновыми изображениями нет никакого события; вы должны проверить себя.
сделайте (XML)HTTP-запрос, и если вы получите ответ с код состояния ошибки или нет ответа вообще (после тайм-аута), используйте другой ресурс изображения. Этот подход ограничен Политика Того Же Происхождения.
вы также можете использовать фиктивное изображение и использовать событие onerror оттуда ...
$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"
>
';