Я обнаружил, что код обработчика, загруженный во внешний JS внизу элемента body, делает обработку ошибок несовместимой - но именно здесь вам нужен код JS, с чем я согласен, поэтому ...
Один из способов обеспечения согласованности обработки ошибок заключается в следующем:
Во-первых, не используйте атрибут onerror
<img src="https://some-host/img1.jpg" alt="" />
Во-вторых, измените ваш showNoPhotoIcon
следующим образом, поскольку он будетвызывается с событием ошибки в качестве аргумента - это упрощает removeEventListener
function showNoPhotoIcon(e) {
const image = e.target;
image.removeEventListener('error', showNoPhotoIcon);
image.src = '/images/no-photo-icon.jpg'
}
Добавьте этот код в common.js
document.querySelectorAll('img').forEach(img => {
if (img.naturalWidth === 0) {
img.addEventListener('error', showNoPhotoIcon);
img.src = img.src;
}
});
Это проверяет, равна ли ширина изображения 0,если это так, то он «перезагружает» его после присоединения обработчика ошибок
На мой взгляд, это немного странно, можно также предположить, что если ширина равна 0, то изображение не существует, но сети являются сетями., вы никогда не знаете - по крайней мере, так, я думаю, вы гарантированно найдете и «исправите» все испорченные изображения