2013-12-16 19 views
3

Я запускаю сценарий, который динамически загружает изображения в зависимости от нескольких критериев. Сценарий не знает заранее, существует ли конкретный источник изображения и, следовательно, необходимо проверить перед отображением изображения. Я делаю это, заменяя обработчик onerror на элементе функцией, которая пытается изящно обработать событие.Подавление HTMLImageElement onerror

На первый взгляд это работает довольно хорошо, однако, несмотря на то, что я заменил событие, браузер все еще проверяет 404 ошибки в консоли, которые я не хочу. Хуже всего то, что IE отображает печально известный значок ошибки JS в строке состояния, который я нахожу довольно неудобным.

Я попытался суммировать проблему в JSFiddle.

var img = new Image(); 
img.onerror = function (ev) { 
    alert("This does not exist!"); 
    return true; 
} 
img.onload = function (ev) { 
    document.body.appendChild(this); 
} 
img.src = "foo.png"; //Missing image 

В принципе, я хочу, чтобы подавить все отчеты об ошибках для этого элемента таким образом, что консоль не перегружена лишним выводом ошибок.

Я знаю, что я мог бы решить эту проблему, предварительно запрограммировав и оценив заголовки HTTP с помощью скриптов AJAX и серверной стороны, которые, в то время как технически возможные решения, я бы предпочел избежать. Однако, хотя я использую только стандартный JS в моем примере, код JQuery также является приемлемым.

Я пробовал читать информацию о спецификации события, но поскольку веб-скрипты по-прежнему являются путаницей запутывания ECMAScript, HTML DOM, клиентом, пылью pixy и теперь определениями HTML5, которые мы все любим ненавидеть, это действительно не помогло меня мудрее. Самое близкое, что я получил, это Mozilla's documentation (что интересно даже не указывает правильные параметры функции), который предположил, что разрешение события true будет подавлять ошибки, но это не работает.

+0

Вы загружаете изображения в тот же домен или не делаете? –

+0

@dystroy Потенциально оба. Поскольку это часть внутренней библиотеки, тип источника неизвестен, но обычно это будут локальные файлы. –

+3

Похоже, что это дубликат, и, к сожалению, решения нет: \ –

ответ

1

Я считаю, вы не можете проверить, не повреждена ли ссылка на изображение/не существует, не получив ошибку 404. На самом деле информация о ссылке нарушена.

Вы упоминали, что другой путь Аякса, чтобы проверить ...

Существование
function UrlExists(url) { 
    var http = new XMLHttpRequest(); 
    http.open('HEAD', url, false); 
    http.send(); 
    return http.status != 404; 
} 

UrlExists('img_url'); 

но вы получите 404 в консоли.

+0

Я на самом деле никогда не думал о том, что вызовы AJAX также вызывают ошибки, поэтому спасибо за это. Тем не менее, поскольку мне нужно было поддерживать как локальные, так и междоменные образы, мне пришлось бы выполнять фактическую проверку на стороне сервера (например, AJAX загружает серверный скрипт, который проверяет существование через cURL), поэтому я не хочу это решение. –

+0

, так что ответ не ... вы не можете сделать это на передней стороне! Да, только серверная. –

Смежные вопросы