Таким образом, кажется, что существует несколько способов обработки сломанных изображений на странице html. Я хотел бы знать, какие способы пользуются популярностью и какие способы рассматриваются как лучшая практика?
Чтобы начать, я посмотрел на себя:
function imgErr(source) {
source.src = /images/missing.jpg";
source.onerror = "";
return true;
}
<img src="test.jpg" alt="test" title="test" onerror="imgErr(this);" />
Плюсы: работает каждый раз, событие всегда будет поймано. Пользователь никогда не видит сломанного изображения. Кажется, хорошо работает в браузерах. Минусы: тег onerror, необходимый для каждого изображения, функция imgErr (источник) должна быть в голове, чтобы уловить ошибки, замедляет время загрузки пользователей,
$('img').error(function(){
$(this).attr('src', 'missing.jpg');
});
Плюсы: очень маленький код, работает на всех изображениях без изменения их разметки, может быть размещен вне головы Минусы: может пропустить событие ошибки в зависимости от скорости события onload на страницах, замедляет время загрузки пользователей.
$(window).load(function() {
$("img").each(function() {
if (!this.complete || typeof this.naturalWidth == "undefined" || this.naturalWidth == 0) {
var src = $(this).attr("src");
var suffix = src.substring(src.length - 6, src.length).split('.')[0];
suffix = suffix.charAt(suffix.length - 1);
$(this).attr("src", "/static/images/generic/missing_" + suffix + ".jpg");
}
});
});
Плюсы: можно размещать в любом месте страницы, исправлять изображения независимо от того, когда они запускаются, не замедляет время загрузки пользователей Минусы: показывает сломанное изображение, пока оно не работает, создавая плохой пользовательский интерфейс.
В моей ситуации время загрузки - самая большая проблема, но я не могу получить последнюю возможность работать в IE должным образом, поскольку она меняет сломанные и не имеет ни одного сломанного изображения!
Cheers, Denis