`
奥义之舞
  • 浏览: 284476 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

IE、FF的JS兼容写法

 
阅读更多

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     
通用: document.body.clientWidth document.body.clientHeight     

// 添加事件     
IE element.attachEvent("onclick",  function );     
FF
element.addEventListener("click",  function ,  true )     
用: element.onclick= function 。虽然都可以使用 onclick 事件,但是 onclick 和上面两种方法的效果是不一样的,
onclick
只有执行一个过程,而 attachEvent addEventListener 执行的是一个过程列表,也就是多个过程。
例如: element.attachEvent("onclick", func1);
element.attachEvent("onclick", func2)
这样 func1 func2 都会被执行。     

// 标签的自定义属性     
IE :如果给标签 div1 定义了一个属性 value ,可以 div1.value div1["value"] 取得该值。     
FF
:不能用 div1.value div1["value"] 取。     
通用: div1.getAttribute("value")     

//document.form.item 问题    
IE: 现有问题:现有代码中存在许多 document.formName.item("itemName") 这样的语句,不能在 MF 下运行    
FF/IE: document.formName.elements["elementName"]   

// 集合 / 数组类对象问题    
(1) 现有问题:    
   
现有代码中许多集合类对象取用时使用 () IE 能接受, MF 不能。    
(2)
解决方法:    
   
改用 [] 作为下标运算。如: document.forms("formName") 改为 document.forms["formName"]    
   
又如: document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1]   

//HTML 对象的 id 作为对象名的问题    
(1) 现有问题    
    
IE 中, HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。    
(2)
解决方法    
    
getElementById("idName") 代替 idName 作为对象变量使用    

// idName 字符串取得对象的问题    
(1) 现有问题    
    
IE 中,利用 eval(idName) 可以取得 id idName HTML 对象,在 MF 中不能。    
(2)
解决方法    
    
getElementById(idName) 代替 eval(idName)    

// 变量名与某 HTML 对象 id 相同的问题    
(1) 现有问题    
   
MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名, IE 中不能。    
(2)
解决方法    
   
在声明变量时,一律加上   var   ,以避免歧义,这样在 IE 中亦可正常运行。    
   
此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。    

//document.getElementsByName() document.all[name] 的问题    
现有问题:在 IE 中, getElementsByName() document.all[name] 均不能用来取得 div 元素
(是否还有其它不能取的元素还不知道)。    
//document.all   
Firefox 可以兼容 document.all 但会生成一条警告。可以用 getElementById("*") 
或者 getElementByTagName("*") 来代替    
不过对于 document.all.length 等属性,则完全不兼容    

//input.type 属性问题     
说明 :IE input.type 属性为只读 ; 但是 Firefox input.type 属性为读写    

//window.location.href 问题     
说明 :IE 或者 Firefox2.0.x , 可以使用 window.location window.location.href;Firefox1.5.x ,
只能使用 window.location   
解决方法 : 使用 window.location 来代替 window.location.href   

// 模态和非模态窗口问题     
说明 :IE , 可以通过 showModalDialog showModelessDialog 打开模态和非模态窗口 ;Firefox 下则不能    
解决方法 : 直接使用 window.open(pageURL,name,parameters) 方式打开新窗口。     
如果需要将子窗口中的参数传递回父窗口 , 可以在子窗口中使用 window.opener 来访问父窗口 . 
例如: var   parWin  =  window.opener; parWin.document.getElementById("Aqing").value  =  "Aqing";    

//frame 问题     
以下面的 frame 为例:     
<frame src="xxx.html"  mce_src="xxx.html"  id="frameId"  name="frameName"  />    
(1)
访问 frame 对象 :    
IE:
使用 window.frameId 或者 window.frameName 来访问这个 frame 对象 . frameId frameName 可以同名。     
FF:
只能使用 window.frameName 来访问这个 frame 对象 .    
另外,在 IE Firefox 中都可以使用 window.document.getElementById("frameId") 来访问这个 frame 对象 .    
(2)
切换 frame 内容 :    
IE Firefox 中都可以使用 window.document.getElementById("testFrame").src  =  "xxx.html"
window.frameName.location  =  "xxx.html" 来切换 frame 的内容 .    
如果需要将 frame 中的参数传回父窗口 ( 注意不是 opener, 而是 parent frame) ,可以在 frme 中使用 parent 来访问父窗口。
例如: window.parent.document.form1.filename.value="Aqing";    

//body 问题     
Firefox body body 标签没有被浏览器完全读入之前就存在;而 IE body 则必须在 body 标签被浏览器完全读入之后才存在    

// 事件委托方法     
IE document.body.onload  =  inject;  //Function inject() 在这之前已被实现     
FF document.body.onload  =  inject();    

//firefox IE 的父元素 (parentElement) 的区别     
IE obj.parentElement    
FF
obj.parentNode    
解决方法 : 因为 FF IE 都支持 DOM, 因此使用 obj.parentNode 是不错选择    

//innerText IE 中能正常工作,但是 innerText FireFox 中却不行 . 需用 textContent   

//FireFox 中设置 HTML 标签的 style 时,所有位置性和字体尺寸的值必须后跟 px 。这个 ie 也是支持的    

// 父节点、子节点和删除节点     
IE parentElement parement.children element.romoveNode( true )     
FF
parentNode parentNode.childNodes node.parentNode.removeChild(node)     

// select options 集合操作     
枚举元素除了 [] 外, SelectName.options.item() 也是可以的 , 另外 SelectName.options.length, 
SelectName.options.add/remove
都可以在两种浏览器上使用。    
注意在 add 后赋值元素,否则会失败    
动态删除 select 中的所有 options     
       document.getElementById("ddlResourceType").options.length=0;    
动态删除 select 中的某一项 option     
       document.getElementById("ddlResourceType").options.remove(indx);     
动态添加 select 中的项 option:    
       document.getElementById("ddlResourceType").options.add(
new   Option(text,value));    
IE FF
动态删除通用方法:    
document.getElementById("ddlResourceType").options[indx]  = 
null ;   

// 捕获事件     
问题:     
FF
没有 setCapture() releaseCapture() 方法     
解决方法:     
IE:    
obj.setCapture();    
obj.releaseCapture();    
FF:    
window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);    
window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);    
if   (!window.captureEvents) {    
       o.setCapture();    
}
else   {    
       window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);    
}    
if   (!window.captureEvents) {    
       o.releaseCapture();    
}
else   {    
       window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);    
}    


// 禁止选取网页内容     
问题:     
FF
需要用 CSS 禁止, IE JS 禁止     
解决方法:     
IE: obj.onselectstart  = 
function () { return   false ;}    
FF:  -moz-user-select:none;    


// 画图     
IE VML     
FF
SVG     

//CSS :透明     
IE filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)     
FF
opacity:0.6     

//CSS :圆角     
IE :不支持圆角。     
FF
-moz-border-radius:4px ,或者 -moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;
-moz-border-radius-bottomleft:4px;-moz-border-radius-  bottomright:4px;
    

//CSS :双线凹凸边框     
IE border:2px outset;     
FF
-moz-  border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white;
-moz-border-right-colors:#404040  #808080;-moz-border-bottom-colors:#404040  #808080;
 


本文来自 CSDN 博客,转载请标明出处: http: //blog.csdn.net/IBM_hoojo/archive/2010/07/02/5708440.aspx

 

分享到:
评论

相关推荐

    ie6 ie7 ff浏览器兼容

    4. **IE6和IE7兼容写法**: ```css *border:2px solid #F00; ``` 在CSS规则前加上星号(`*`),可以使得该规则仅对IE6和IE7生效。这里的边框颜色被设置为红色。 5. **IE6兼容写法**: ```css _border:2px ...

    IE和FF兼容问题

    ### IE和FF兼容问题详解 #### 一、引言 随着互联网技术的不断发展与普及,网页设计者们面临着越来越复杂的浏览器兼容性挑战。在众多浏览器中,Internet Explorer(简称IE)与Firefox因其庞大的用户基数而成为了...

    JAVASCRIPT IE 与 FF 中兼容写法记录

    为了实现JavaScript代码在Internet Explorer(IE)和Mozilla Firefox(FF)两大浏览器中的兼容性,开发者们需要了解两种浏览器在DOM操作、事件处理、CSS属性以及JavaScript对象和属性上的差异性。以下是一些关键知识...

    IE和ff的兼容技巧

    本文将根据作者从事网站前端编程两年的经验总结,针对Internet Explorer(简称IE)和Mozilla Firefox(简称FF或Firefox)这两种常用浏览器的兼容性问题进行深入探讨,并提出相应的解决技巧。 #### 二、具体兼容技巧...

    ie6_ie7_ie8_ff(火狐)浏览器兼容性

    在IT行业的前端开发领域,浏览器兼容性一直是一个关键议题,特别是在处理旧版浏览器如IE6、IE7、IE8以及火狐(Firefox)时。本文将深入探讨这些浏览器的兼容性问题,以及如何通过特定的技术手段来实现跨浏览器的一致...

    个人CSS设计兼容性问题总结教程

    `可以解决这个问题,不过仅限于IE7、FF等浏览器。为了解决这个问题,我们可能需要使用CSS Hack。例如,`\9`用于IE6、7、8,`\0`仅适用于IE8,`*`和`*+html`分别针对IE6和IE7。 CSS Hack是为了应对不同浏览器间的...

    Firefox和IE浏览器兼容JS脚本写法小结

    1.window.event兼容脚本 function getEvent(){ //获取浏览器事件,同时兼容ie和ff的写法 if(document.all) return window.event; func=getEvent.caller; while(func!=null){ var arg0=func.arguments[0];...

    引用 js在IE与FF之间的区别详细解析

    此外,Firefox支持DOM集合使用方括号[]来索引,而IE还额外支持圆括号()的使用,开发者在兼容写法时需要注意。 JavaScript中还有几个重要的方法在不同浏览器间存在差异。比如innerText和textContent在IE和Firefox中...

    IE浏览器兼容Firefox的JS脚本的代码

    父控件下的子控件 8.XmlHttp 1.window.event兼容脚本 function getEvent(){ //获取浏览器事件,同时兼容ie和ff的写法 if(document.all) return window.event; func=getEvent.caller; while(func!=null){ var arg0=...

    HTML在IE浏览器和FF浏览器中标签的使用

    兼容写法为`var target = e.relatedTarget || e.toElement`。 2. **标签坐标位置**:IE提供了style.posLeft和style.posTop,FF不支持。可以用obj.offsetLeft和obj.offsetTop作为通用属性。 3. **窗体尺寸**:IE...

    CSS中针对IE6、7和FF等浏览器的特殊样式写法

    在前端开发领域,CSS样式兼容性问题一直是开发者面临的一大挑战,特别是针对老版本的Internet Explorer(IE6和IE7)以及Firefox(FF)浏览器。这些浏览器对于CSS的解析和实现存在差异,导致开发者需要采取特定的技巧...

    JavaScript兼容浏览器FF/IE技巧

    为了确保用户体验的一致性以及减少技术问题带来的客户投诉,掌握一些JavaScript兼容性处理技巧是必要的。 首先是`window.event`对象的问题。在IE浏览器中,所有的事件处理函数都默认有一个`window.event`对象可供...

    区分ie6 7 8 FF 的css hack 日常总结

    "区分ie6 7 8 FF 的css hack 日常总结"这个主题集中讨论了如何针对IE6、IE7、IE8以及Firefox等浏览器编写特定的CSS代码来实现跨浏览器的兼容性。 首先,让我们了解CSS Hack的基本概念。CSS Hack是指由于不同浏览器...

    ie和火狐的兼容问题总结

    #### JavaScript兼容性问题 1. **`textContent`与`innerText`**: - **IE**:仅支持`innerText`属性,该属性返回或设置节点及其子节点的文本内容,不包括任何标签或格式。 - **Firefox**:支持`textContent`和`...

    Javascript下IE与Firefox下的差异兼容写法总结

    window.event对象差异 IE:有window.event对象 FF:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=doMouseMove(event) 获取鼠标当前坐标 IE:event.x和event.y。 FF:event.pageX和event...

    javascript event在FF和IE的兼容传参心得(绝对好用)

    ### JavaScript事件在Firefox(FF)和Internet Explorer(IE)中的兼容性传参心得 #### 事件对象的兼容处理 JavaScript在不同的浏览器中有不同的事件处理机制,特别是在IE和FF之间。IE使用`window.event`来访问...

    js文本框输入点回车触发确定兼容IE、FF等

    本篇文章讲解了如何在文本框中通过按回车键触发确定操作,并且确保该功能在不同的浏览器(如IE和FF等)之间具有良好的兼容性。在此基础上,文章提供了一个具体的示例代码来说明如何实现这一功能。 知识点主要包括:...

Global site tag (gtag.js) - Google Analytics