日期:2014-05-17  浏览次数:20616 次

[分享]兼容IE和FF的js脚本做法(比较常用)
本帖最后由 IBM_hoojo 于 2010-07-03 12:24:43 编辑

做BS开发就难免会用到javascript,而每个浏览器对javascript的支持有不同。这就需要我们程序员去兼容他们
下面是兼容IE和FF的js脚本做法和分解(部分选自网上,经本人整理),希望对大家有帮助。   
  
  
/*以下以 IE 代替 Internet Explorer,以 MF/FF 代替 Mozzila Firefox  */ 
  
//window.event    
IE:有window.event对象    
FF:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=doMouseMove(event) 
解决方法:var event = event || window.event;  
example:
<script>
       function test(event) {
            var event = event || window.event;
            //do Something
       }
</script>
<input type="button" value="click" onclick="test(event)"/>
 
  
//鼠标当前坐标    
IE:event.x和event.y。    
FF:event.pageX和event.pageY。    
通用:两者都有event.clientX和event.clientY属性。    
  
//鼠标当前坐标(加上滚动条滚过的距离)    
IE:event.offsetX和event.offsetY。    
FF:event.layerX和event.layerY。
解决方法:
<script>
       function test(event) {
            var event = event || window.event;
            //or var event = event ? event : window.event;//这2中都可以,也可以用if else(这简写)
            var x = event.offsetX || event.layerX;
            var y = event.offsetY || event.layerY;
            //do Something
       }
</script>    
<div onmousedown="test(event)"></div>  
/**其他的兼容的解决方法类似,不再一一举例**/

//event.srcElement问题    
说明:IE下,event对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,
但是没有srcElement属性.    
解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)
来代替IE下的event.srcElement或者
Firefox下的event.target. 请同时注意event的兼容性问题。   
  
//event.toElement问题    
问题:    
IE下,even对象有srcElement属性,但是没有target属性;
Firefox下,even对象有target属性,但是没有srcElement属性    
解决方法:    
var target = e.relatedTarget || e.toElement;    
  
//标签的x和y的坐标位置:style.posLeft 和 style.posTop    
IE:有。    
FF:没有。    
通用:object.offsetLeft 和 object.offsetTop。    
  
//窗体的高度和宽度    
IE:document.body.offsetWidth和document.body.offsetHeight。注意:此时页面一定要有body标签。    
FF:window.innerWidth和window.innerHegiht,
以及document.documentElement.clientWidth和document.documentElement.clientHeight。