本文探讨了在Chrome浏览器中,当window.onload被赋值为函数执行结果(如new init())时,可能导致图片尚未完全加载即执行代码,从而无法正确读取图片尺寸(offsetWidth返回0)的问题。通过修正为直接赋值函数引用或匿名函数,可确保在图片加载完成后获取真实尺寸,兼容IE和Firefox。
Chrome中window.onload与图片尺寸读取问题
假设我们有一个如下结构的网页:
具体代码实现如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
</head>
<body>
<img src="/upload/2010-3/20100301192859481.gif" alt="" id="image">
<script type="text/javascript">
var init=function (){
var img=document.getElementById('image');
alert(img.offsetWidth);
}
window.onload=new init();
</script>
</body>
</html> 在Internet Explorer和Firefox浏览器中运行上述代码,即使未显式指定img标签的width和height属性,也能正常显示图片的真实大小。然而,在Chrome浏览器中,此时alert弹出的offsetWidth值却为0。
若将window.onload赋值语句中的new init()修改为:
window.onload=init
或者修改为:
window.onload=function(){new init(){}}
则可以在图片完全加载后,正确读取并显示图片的尺寸信息。
转载请注明以下来源信息:
作者:北玉(tw:@rehawk)