This code is the core of a much larger script that works great in almost all browsers. Yet it didn’t work in IE. So I’ve stripped it down and found that the image.onload isn’t firing in IE.
I’ve done some research, and I’ve guarded against it being an image caching problem. For one, the error occurs first time round before anything is cached, and, more importantly, the onload event is attached before the src.
I’m also reasonably sure I’m attaching the onload event in an IE compatible manner, so what gives, why don’t I get an alert?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
function generate(){
var imageGen = document.createElement("img");
imageGen.setAttribute('onload',"primer()");
imageGen.setAttribute('src', "http://www.google.co.uk/images/srpr/logo3w.png");
document.getElementById('image').appendChild(imageGen);
}
function primer() {
alert("here now");
}
</script>
</head>
<body onload="generate()">
<div id="image">
</div>
</body>
</html>
I’m hosting a version here
I only have access to IE8 unfortunately, so I don’t know if it persists across other versions, even so it needs to be fixed.
First of all, events are not attributes and must not be set using
setAttribute. It might, or might not work.Second, try creating image object instead of image element:
Live test case – worked fine for me on IE9 and IE9 compatibility mode which should be like IE8.