本文探讨在Web开发中获取图片宽高时,IE浏览器因缓存机制导致onload事件失效的问题。通过分析发现,先设置src后绑定onload会导致事件在绑定前已触发。解决方案是先绑定onload回调,再设置图片src属性,从而确保事件正常触发。
IE浏览器图片onload事件失效问题
在Web开发过程中,获取图片的宽高是常见需求。由于图片在加载完成前无法获取其实际尺寸,必须在加载完成后才能读取图片本身的宽高属性。例如:
代码如下:
var img = new Image();
img.src = "loading.gif";
img.onload = function(){
alert ( img.width );
};
问题原因与解决方案
这段代码看似没有问题,但在IE浏览器中会存在一个Bug。首次打开页面时正常,但第二次使用该方法时会出现问题,IE浏览器无反应,即使刷新页面也是如此。这是因为IE会缓存图片,第二次加载的图片并非从服务器下载,而是直接从缓冲区读取。先编写onload方法,再指定图片URL即可恢复正常。因此,并非IE未触发onload事件,而是从缓冲区加载的速度过快,导致在运行到img.onload之前,onload事件已经触发。这样处理即可解决问题。
代码如下:
var img = new Image();
img.onload = function(){
alert ( img.width );
};
img.src = "loading.gif";