Existe uma maneira de determinar se um caminho de imagem leva a uma imagem real, ou seja, detectar quando uma imagem falha ao carregar em Javascript.
Para um aplicativo da web, estou analisando um arquivo xml e criando imagens HTML dinamicamente a partir de uma lista de caminhos de imagem. Alguns caminhos de imagem podem não existir mais no servidor, portanto, quero falhar normalmente detectando quais imagens falham ao carregar e excluindo esse elemento HTML img.
Nota As soluções JQuery não poderão ser usadas (o chefe não quer usar JQuery, sim, eu sei, não me faça começar). Eu conheço uma maneira no JQuery de detectar quando uma imagem é carregada, mas não se ela falhou.
Meu código para criar elementos img, mas como posso detectar se o caminho img leva a uma falha ao carregar a imagem?
var imgObj = new Image(); // document.createElement("img");
imgObj.src = src;
fonte
Respostas:
Você pode tentar o seguinte código. Não posso garantir a compatibilidade do navegador, então você terá que testar isso.
E minhas condolências para o chefe resistente a jQuery!
fonte
A resposta é boa, mas apresenta um problema. Sempre que você atribui
onload
ouonerror
diretamente, ele pode substituir o retorno de chamada atribuído anteriormente. É por isso que existe um bom método que "registra o ouvinte especificado no EventTarget em que é chamado", como dizem no MDN . Você pode registrar quantos ouvintes desejar no mesmo evento.Deixe-me reescrever a resposta um pouco.
Como o processo de carregamento de recursos externos é assíncrono, seria ainda melhor usar o JavaScript moderno com promessas, como as seguintes.
fonte
Este:
fonte
<img src="your/path/that/might/fail.png" onerror="$(this).hide();"/>
fonte
jQuery + CSS para img
Com jQuery, isso está funcionando para mim:
E posso usar essa imagem em qualquer lugar do meu site, independentemente do tamanho dela, com a seguinte propriedade CSS3:
CSS apenas para background-img
Para imagens de fundo ausentes, também adicionei o seguinte em cada
background-image
declaração:Lado do servidor Apache
Outra solução é detectar a imagem ausente com o Apache antes de enviar ao navegador e substituí-la pelo conteúdo padrão no-img.png.
fonte
Aqui está uma função que escrevi para outra resposta: Javascript Image Url Verify . Eu não sei se é exatamente o que você precisa, mas ele usa as várias técnicas que você usaria que incluem manipuladores para
onload
,onerror
,onabort
e um tempo limite geral.Como o carregamento da imagem é assíncrono, você chama essa função com sua imagem e, em seguida, ela chama seu retorno de chamada algum tempo depois com o resultado.
fonte
assim como abaixo:
fonte