Waiting for image to load in JavaScript

var img = new Image();
img.onload = function() { alert("Height: " + this.height); }
img.src = "http://path/to/image.jpg";

Note that it’s important to do it in the order above: First attach the handler, then set the src. If you do it the other way around, and the image is in cache, you may miss the event. JavaScript is run on a single thread in browsers (unless you’re using web workers), but browsers are not single-threaded. It’s perfectly valid for the browser to see the src, identify the resource is available, load it, trigger the event, look at the element to see if it has any handlers that need to be queued for callback, not see any, and complete the event processing, all between the src line and the line attaching the handler. (The callbacks wouldn’t happen between the lines if they were registered, they’d wait in the queue, but if there aren’t any, the event isn’t required to wait.)

Leave a Comment