I am trying to append an image to a page using JavaScript:
image = document.createElement('img');
image.onload = function(){
document.body.appendChild(image);
}
image.onerror = function(){
//display error
}
image.src = 'http://example.com/image.png';
The user must be authenticated to see this image, and if they are not, I want to display an error message. Unfortunately, the server is not returning an HTTP error message, but rather redirect the request to a (mostly) empty page, so I am getting an HTTP 200
, but the warning Resource interpreted as Image but transferred with MIME type text/html
and nothing is displaying.
How can I handle this case? I don't have the ability to change what the webserver serves up if the user isn't authenticated.
Here is my solution. If I've 404 for my image - I try to insert one of my array that is 200 OK (Pure Javascript). Images must be in same path. Otherwise - my func will return 'no-image.png'. jQuery/JavaScript to replace broken images
In the
image.onload
event listener, check whetherimage.width
andimage.height
are both zero (preferablyimage.naturalWidth
andimage.naturalHeight
, when they are supported).If the width and height are both zero, the image is considered invalid.
Demo: http://jsfiddle.net/RbNeG/