`
sunxboy
  • 浏览: 2876700 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ie和firefox中img对象区别的困惑

阅读更多

在调试js时遇到一些恶心的问题,于是做了一个测试程序,放到网上让大家帮我测试。帖子见http://vchelp.net/cndevforum/subject_view.asp?page=-1&subject_id=165791

下面我给出关于测试的解释:
起因源于我想做这么一个网页:用户上传一个图片后,如果图片大于500象素,则在客户 端把图片缩小成500象素大小。但是不想让用户看到这个大小调整过程。于是想首先隐藏这个图片,在整个网页下载完成后,调整大小,然后再显示调整好的图像。
于是我首先设置img标签的style="display:none",然后在window.onload中获取原图大小,进行调整。
<img src="http:......" style="display:none" id="c010_jpg">
结果发现firefox下,一个disolay=none的图像width和height是原图的实际大小,但是ie下却都是0
于是想到稳妥的办法是建立一个image对象,然后对src赋值,进而读取原图大小的信息:
var oImg = new Image();
oImg.src = docunent.getElementById("c010_jpg").src;
//马上读取oImg的width和height
alert([oImg.width, oImg.height]);
结果在ie测试发现,上面的代码会输出“0,0”
我怀疑这说明当ie解析一个display:none的img标签时,并没有下载这个图片,所以上面的代码对oImg.src赋值后ie需要从目标地址下载这个图片,当然,这个过程是异步的过程
而在firefox下,上面的代码会输出正确的信息,这说明firefox解析display:none的图片时,已经下载了这个图片。以后再对oImg.src赋值时,直接从缓存中获取,所以速度快
想到这一点我只好用更复杂更稳妥的办法了:
var oImg = new Image();
oImg.onload = function (){alert([oImg.width, oImg.height]);}
oImg.src = docunent.getElementById("c010_jpg").src;
//当src被载入后,输出oImg的宽和高
使用 事件和回调函数是没办法的事情。处理这种异步过程使程序结构变得很难看。
另外,在w3c中( http://www.w3.org/TR/REC-DOM-Level-1/idl-definitions.html)没有找到HTMLImageElement的readyState和complete属性,
发现firefox实现了complete属性,而ie实现了complete属性和readyState属性
但是两者对属性的定义好像不同:
firefox: 一个图像被下载完毕,complete属性就是true,没有下载完毕则为false
ie: 一个图像没有被下载完毕,则readyState属性为uninitialized,complete属性是false.当下载完毕时, readyState为complete,而如果此时图片还没有显示,complete为false,显示以后(display:block)此属性才变 成true
没想到一个简单的功能竟然这么费劲,浏览器的兼容问题很难顺利解决,特别是很多细节非常浪费时间,希望别人遇到这些问题时还是多考虑从服务端脚本中解决这些问题。从而绕过对浏览器兼容的复杂测试。

另外我还非常疑惑,为什么现实中的ie对于onload事件,大部分不是异步的,只有少数同志的ie对于此事件是异步的。

 

 

分享到:
评论
1 楼 vera_sq 2009-12-07  
我现在遇到一个类似的问题,我现在的需求是通过onload事件调用js,然后在页面显示图片,也是在firefox可以显示,在ie下面就不行,img的标签路径是没有错的,请指点下呢?谢谢!

相关推荐

    兼容IE和Firefox获得keyBoardEvent对象

    本文将讨论IE和Firefox中获得keyBoardEvent对象的方法,并提供相应的解决方案。 1. 获取表单元素 在IE中,可以使用document.formName.item("itemName")或document.formName.elements["elementName"]来获取表单元素...

    javascript在IE和Firefox中兼容性问题

    IE提供了ActiveXObject,可以创建XMLDOM对象,如`new ActiveXObject("MSXML2.DOMDocument")`,而Firefox和其他遵循W3C标准的浏览器则使用`document.implementation.createDocument()`方法。 2. **ChildNodes测试....

    js在IE和fireFox的区别

    ### JavaScript在Internet Explorer (IE) 和 Firefox 中的区别与解决方案 #### 一、获取HTML元素的方式差异 1. **通过ID获取元素**: - **IE**:支持`document.getElementById`和`document.all`两种方式。 - ...

    JavaScript在IE和Firefox(火狐)的不兼容问题解决

    标题与描述均聚焦于“JavaScript在IE和Firefox(火狐)的不兼容问题解决”,这表明文章旨在探讨并提供解决方案来处理在不同浏览器环境下的JavaScript兼容性问题,尤其是在Internet Explorer(IE)和Mozilla Firefox...

    在Firefox下直接调用IE浏览器(IETab这个插件).zip

    标题中的"IETab"是一个Firefox浏览器插件,它允许用户在Firefox中直接使用Internet Explorer(IE)的渲染引擎来打开网页。这个插件对于那些必须访问仅支持IE特性的网站的用户来说非常有用,因为某些老旧或特定的Web...

    Ie和firefox的Js区别

    JavaScript是一种广泛用于网页开发的脚本语言,它在不同的浏览器中有不同的实现,其中最显著的区别在于Internet Explorer(IE)和Mozilla Firefox(Firefox)。以下是一些关键的区别点: 1. **对象问题** - **...

    js在IE和Firefox不同之处

    ### js在IE和Firefox不同之处 在Web开发中,JavaScript(简称JS)是实现网页交互性的核心语言之一。然而,由于不同的浏览器对于JS标准的支持程度有所差异,这往往会导致跨浏览器兼容性问题的出现。IE(Internet ...

    IE与Firefox的事件区别

    在不同的浏览器环境下,事件处理的实现机制有所差异,尤其是在Internet Explorer(IE)和Firefox之间。本文将深入探讨这些差异,以帮助开发者更好地理解和解决跨浏览器的兼容性问题。 首先,我们要了解事件流的概念...

    Javascript的IE和Firefox兼容性参考

    JavaScript是一种广泛应用于网页开发的脚本语言,但在不同的浏览器中,其执行方式可能存在差异,特别是老版本的Internet Explorer(IE)和Firefox。由于历史原因,IE对某些特性有着独特的实现,而Firefox则遵循更...

    Javascript在IE和FireFox中的兼容处理

    然而,由于不同浏览器的实现差异,特别是Internet Explorer(IE)和Firefox,开发者经常面临兼容性问题。以下是一些关键的JavaScript兼容处理策略: 1. **数组、集合类对象的元素访问** - IE支持`for...in`循环...

    mxGraph破解包含ie和firefox

    mxGraph是一款强大的...通过以上方法,开发者可以逐步解决mxGraph在IE和Firefox中的兼容性问题,实现更广泛的支持。不过,随着IE的逐渐淘汰,重点可能更多地转移到如何优化mxGraph在现代浏览器和移动设备上的体验。

    IE和Firefox对JavaScript的兼容

    再者,CSS样式和JavaScript的交互在IE和Firefox上也有区别。IE有时会忽视标准的style属性,而是使用专有的currentStyle属性来获取元素的样式,而Firefox使用window.getComputedStyle()。此外,对于某些CSS属性,如...

    Javascript的IE和Firefox(火狐)兼容性

    ### Javascript的IE与Firefox(火狐)兼容性解决方案 在Web开发过程中,浏览器兼容性问题一直是开发者们关注的重点之一。由于不同的浏览器对于Web标准的支持程度存在差异,这导致了同样的代码在不同浏览器中的表现...

    C# 实时获取IE和FireFox浏览器中URL

    经过三天的苦战,查询无数的国外网站终于实现了对IE和FireFox浏览器的URl地址实时监控。利用API和DDE分别对IE和FireFox进行了浏览器地址获取,完整的源码程序,与大家分享学习。后期将完善,实现对IE,FireFox,360,...

    让IE和火狐同时兼容

    特别是在早期的Web时代,Internet Explorer(简称IE)与Mozilla Firefox(简称火狐)这两款浏览器之间存在着显著的差异,这使得页面设计师不得不花费大量时间去解决它们之间的兼容性问题。本文将详细介绍如何使网站...

    Firefox IE Tab

    "Firefox IE Tab"是一款专为火狐浏览器设计的扩展,它允许用户在Firefox中以Internet Explorer内核的方式浏览网页。这个扩展对于那些需要在不同浏览器环境中测试网站兼容性的开发者或者经常在两个浏览器间切换的用户...

Global site tag (gtag.js) - Google Analytics