I am trying to attach an event handler for the onerror event (404 error) to a <link> element.
I have something like this on my page:
<link rel="stylesheet" type="text/css" href="dead/link.css" onerror="handle404Error()" />
It works fine on Chrome and Opera but it should work on IE9+ too. I found this, but I can't find a solution myself.
Is there a way to do that without writing an extra method to load styles dynamically?
NOTE: I didn't tag this question with 'jquery', so please don't use it in your answers.
In IE, the onerror event does not fire on invalid link URLs, but the onload event does.
In Chrome, the opposite is true: The onload event does not fire on invalid link URLs, but the onerror event does.
So you'll need to use both events:
<link rel="stylesheet" type="text/css"
href="dead/link.css"
onload="handle404Error(this)"
onerror="handle404Error(this, true)"
/>
function handle404Error(el, failed) {
if(failed || (el.sheet.cssRules && !el.sheet.cssRules.length)) {
//Failed!
}
else {
//Success!
}
}
http://jsfiddle.net/et0g2xg6/
http://jsfiddle.net/et0g2xg6/1
Update August 2017, thanks to @Alex:
onerroris fired by Chrome and Firefox.onloadis fired by Internet Explorer.
Edge fires neitheronerrornoronload.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With