У меня есть веб-страница, которая включает в себя кучу изображений. Иногда изображение недоступно, поэтому поврежденное изображение отображается в браузере клиента.
Как мне использовать jQuery, чтобы получить набор изображений, отфильтровать его до поврежденных изображений, а затем заменить src?
- Я думал, что с jQuery было бы легче сделать это, но оказалось гораздо проще просто использовать чистое решение JavaScript, то есть то, которое предоставляет Prestaul.
javascript
jquery
html
brokenimage
Дэн Лорд
источник
источник
Я использую встроенный
error
обработчик:Edit:
error()
метод является устаревшим в JQuery 1.8 и выше. Вместо этого вы должны использовать.on("error")
вместо:источник
Если кто-то, вроде меня, попытается прикрепить
error
событие к динамическомуimg
тегу HTML , я хотел бы отметить, что здесь есть одна загвоздка:Очевидно, что
img
ошибки ошибок не всплывают в большинстве браузеров, в отличие от того, что говорится в стандарте .Итак, что-то вроде следующего не будет работать :
Надеюсь, это будет полезно для кого-то еще. Я хотел бы видеть это здесь, в этой теме. Но я не сделал. Итак, я добавляю это
источник
Вот отдельное решение:
источник
$.browser
устарела и теперь удалена, вместо нее используйте функцию обнаружения (в этом случае усложняется).204 No Content
это будет сломанное изображение.Я считаю, что это то, что вы после: jQuery.Preload
Вот пример кода из демо, вы указываете загрузку и не найденные изображения, и все готово:
источник
Источник: http://www.developria.com/2009/03/jquery-quickie---broken-images.html
источник
В то время как ОП искал замену SRC, я уверен, что многие люди, затрагивающие этот вопрос, могут пожелать только скрыть испорченное изображение, и в этом случае это простое решение отлично сработало для меня.
Использование встроенного JavaScript:
Использование внешнего JavaScript:
Использование современного внешнего JavaScript:
Смотрите поддержку браузера для функций NoteList.forEach и стрелки .
источник
Вот быстрый и грязный способ заменить все испорченные изображения, и нет необходимости менять HTML-код;)
пример кода
источник
Я не смог найти скрипт, который бы соответствовал моим потребностям, поэтому я сделал рекурсивную функцию, чтобы проверять битые изображения и пытаться загружать их каждые четыре секунды, пока они не будут исправлены.
Я ограничил его до 10 попыток, как если бы он не загружался, тогда изображение может отсутствовать на сервере, и функция могла бы войти в бесконечный цикл. Я все еще проверяю все же. Не стесняйтесь настроить его :)
источник
Это дрянная техника, но она в значительной степени гарантирована:
источник
Вы можете использовать собственный выбор GitHub для этого:
Внешний интерфейс: https://github.com/github/fetch
или для Backend, версия Node.js: https://github.com/bitinn/node-fetch.
Редактировать: этот метод заменит XHR и предположительно уже был в Chrome. Для тех, кто читает это в будущем, вам может не понадобиться указанная выше библиотека.
источник
Это JavaScript, он должен быть совместим с кросс-браузерными и доставляется без уродливой разметки
onerror=""
:CODEPEN:
источник
while (i--)
Лучше звонить, используя
Поскольку использование
document.ready
не обязательно означает, что изображения загружаются, только HTML. Таким образом, нет необходимости в задержке вызова.источник
CoffeeScriptВариант :
Я сделал это, чтобы исправить проблему с Turbolinks, из-за которой метод .error () иногда вызывался в Firefox, даже если изображение действительно там.
источник
Используя ответ Престола , я добавил несколько проверок и предпочитаю использовать способ jQuery.
источник
Если вы вставили
img
с помощьюinnerHTML
, например:,$("div").innerHTML = <img src="wrong-uri">
вы можете загрузить другое изображение, если оно не работает, например, это:Зачем
javascript: _
нужен? Поскольку сценарии, внедренные в DOM через теги сценариевinnerHTML
, не запускаются в момент их внедрения, поэтому вам необходимо быть явным.источник
Я нашел этот пост, глядя на этот другой пост . Ниже копия ответа, который я дал там.
Я знаю, что это старая ветка, но React стал популярным, и, возможно, кто-то, использующий React, придет сюда в поисках ответа на ту же проблему.
Итак, если вы используете React, вы можете сделать что-то вроде ниже, который был оригинальным ответом, предоставленным Беном Альпертом из команды React здесь
источник
Я создал скрипку для замены сломанного изображения с помощью события «onerror». Это может помочь вам.
источник
Вот пример использования объекта HTML5 Image, обернутого JQuery. Вызовите функцию загрузки для основного URL-адреса изображения и, если эта загрузка вызовет ошибку, замените атрибут src изображения резервным URL-адресом.
источник
Чистый JS. Моя задача заключалась в следующем: если изображение 'bl-once.png' пусто -> вставить первое (которое не имеет статуса 404) изображение из списка массивов (в текущем каталоге):
Может быть, это нужно улучшить, но:
Таким образом, он вставит правильный 'required.png' в мой src или 'no-image.png' из текущего каталога.
источник
Я не уверен, что есть лучший способ, но я могу придумать, как его получить - вы можете Ajax опубликовать URL-адрес img и проанализировать ответ, чтобы увидеть, действительно ли изображение вернулось. Если это вернулось как 404 или что-то, тогда поменяйте img. Хотя я ожидаю, что это будет довольно медленно.
источник
Я решил свою проблему с помощью этих двух простых функций:
источник
JQuery 1,8
JQuery 3
ссылка
источник
Я думаю , что у меня есть более элегантный способ с делегацией событий и событий захвата на
window
«S ,error
даже если образ резервной копии не нагрузки.Дело в том :
Поместите код в
head
и выполняется как первый встроенный скрипт. Таким образом, он будет слушать ошибки, произошедшие после сценария.Используйте захват событий, чтобы поймать ошибки, особенно для тех событий, которые не всплывают.
Используйте делегирование событий, которое позволяет избежать привязки событий на каждом изображении.
Присвойте
img
элементу ошибки атрибут после того, как он получил их,backup.png
чтобы избежать исчезновенияbackup.png
и последующего бесконечного цикла, как показано ниже:img error-> backup.png-> error-> backup.png-> error-> ,,,,,
источник
let isImgErrorHandled = target.src === 'backup.png';
поскольку это немного упрощает.target.src='backup.png'
, но в следующий разconsole.log(target.src)
может не бытьbackup.png
Вы можете передать путь заполнителя и получить к нему доступ ко всем свойствам из объекта изображения с ошибкой через
$*
:http://jsfiddle.net/ARTsinn/Cu4Zn/
источник
Это расстраивало меня годами. Мое исправление CSS устанавливает фоновое изображение на
img
. Когда динамическое изображениеsrc
не загружается на передний план, наimg
bg виден заполнитель . Это работает , если ваши изображения имеют размер по умолчанию (напримерheight
,min-height
,width
и / илиmin-width
).Вы увидите значок разбитого изображения, но это улучшение. Проверено до IE9 успешно. iOS Safari и Chrome даже не показывают сломанный значок.
Добавьте немного анимации, чтобы дать
src
время для загрузки без мерцания фона. Chrome плавно исчезает на заднем плане, а настольный Safari - нет.источник
Если изображение не может быть загружено (например, потому что его нет в указанном URL-адресе), URL-адрес изображения изменится на стандартный,
Подробнее о .error ()
источник
У меня та же проблема. Этот код хорошо работает в моем случае.
источник
Иногда использование
error
события неосуществимо, например, потому что вы пытаетесь что-то сделать на странице, которая уже загружена, например, когда вы запускаете код через консоль, букмарклет или скрипт, загруженный асинхронно. В этом случае, проверяя этоimg.naturalWidth
иimg.naturalHeight
0, кажется, делает свое дело.Например, вот фрагмент для перезагрузки всех неработающих изображений из консоли:
источник
Я нашел, что это работает лучше всего, если какое-либо изображение не загружается в первый раз, оно полностью удаляется из DOM. Выполнение
console.clear()
сохраняет консольное окно чистым, поскольку ошибки 404 нельзя пропустить с помощью блоков try / catch.источник