Javascript在IE和Firefox浏览器常见兼容性问题总结


Posted in Javascript onAugust 03, 2016

本文总结分析了Javascript在IE和Firefox浏览器常见兼容性问题。分享给大家供大家参考,具体如下:

表单

document.formName.item("itemName")

IE:可以使用document.formName.item("itemName")或document.formName.elements["elementName"]

Firefox:只能使用document.formName.elements["elementName"]

解决方法:统一使用document.formName.elements["elementName"]

集合类对象

IE:可以使用()或[]获取集合类对象;

Firefox:只能使用[]获取集合类对象.

解决方法:统一使用[]获取集合类对象.

自定义属性

IE:可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性

Firefox:只能使用getAttribute()获取自定义属性.

解决方法:统一通过getAttribute()获取自定义属性.

元素获取

eval("idName")

IE:可以使用eval("idName")或getElementById("idName")来取得id为idName的HTML对象;

Firefox:只能使用getElementById("idName")来取得id为idName的HTML对象。

解决方法:统一用getElementById("idName")来取得id为idName的HTML对象。

命名重复

变量名与某HTML对象ID相同的问题

IE:HTML对象的ID可以作为document的下属对象变量名直接使用,Firefox下则不能;

Firefox:可以使用与HTML对象ID相同的变量名,IE下则不能。

解决方法:使用document.getElementById("idName")代替document.idName。最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免产生歧义。

const

IE:只能使用var关键字来定义变量。

Firefox:可以使用const关键字或var关键字来定义变量。

解决方法:统一使用var关键字来定义变量。

input.type

input.type属性问题

IE:input.type属性为只读。

Firefox:input.type属性为读写。

window.event

window.event只能在IE下运行,而不能在Firefox下运行,这是因为Firefox的event只能在事件发生的现场使用。

Firefox:必须从源处加入event作参数传递。IE忽略该参数,用window.event来读取该event。

解决方法:

<script language="javascript"> 
function fun(e) { 
  e = e ? e : (window.event ? window.event : null); 
} 
</script>

event.x与event.y

说明:IE下,even对象有x,y属性,但是没有pageX,pageY属性;Firefox下,even对象有pageX,pageY属性,但是没有x,y属性.
解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.

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 的兼容性问题。

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" id="frameId" name="frameName" />

1.访问frame对象:

[ ie中返回的为object , ff中会显示具体的类型 比如: object window ]

IE:使用window.frameId或者window.frameName来访问这个frame对象. frameId和frameName可以同名。
Firefox:只能使用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来访问父窗口。例如:parent.document.form1.filename.value="a";

body

IE:body必须在body标签被浏览器完全读入之后才存在。

Firefox:body在body标签没有被浏览器完全读入之前就存在。

事件委托方法

IE:

document.body.onload = inject; //function inject()在这之前已被实现

Firefox:

document.body.onload = inject();

父元素

Firefox与IE的父元素(parentElement)的区别

IE:obj.parentElement

Firefox:obj.parentNode

解决方法:因为firefox与IE都支持DOM,因此使用obj.parentNode是不错选择.

鼠标指针cursor

cursor:hand VS cursor:pointer

Firefox:不支持hand

IE:支持pointer

解决方法:统一使用pointer

内容文本

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

解决方法:

if(navigator.appName.indexOf("Explorer") > -1){ 
  document.getElementById('element').innerText = "my text"; 
} else{ 
  document.getElementById('element').textC; 
}

对table的操作

IE,Firefox以及其它浏览器对于 table 标签的操作都各不相同,在IE中不允许对table和tr的innerHTML赋值,使用js增加一个tr时,使用appendChild方法也不管用。

解决方法:

//向table追加一个空行: 
var row = otable.insertRow(-1); 
var cell = document.createElement("td"); 
cell.innerHTML = " "; 
cell.className = "a"; 
row.appendChild(cell);

options集合

对select的options集合操作

枚举元素除了[]外,SelectName.options.item()也是可以的,另外SelectName.options.length, SelectName.options.add/remove都可以在两种浏览器上使用。

*注意在 add后赋值元素,否则会失败。

XMLHTTP

if (window.XMLHttpRequest) { 
  xmlhttp = new XMLHttpRequest(); 
} else if (window.ActiveXObject) { // code for IE 
  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
if (xmlhttp){ 
  xmlhttp.onreadystatechange = xmlhttpChange; 
  xmlhttp.open("GET",url,true); 
  xmlhttp.send(); 
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Prototype Selector对象学习
Jul 23 Javascript
JavaScript实现网页上的浮动广告的简单方法
Jun 14 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
Jul 11 Javascript
javascript中定义私有方法说明(private method)
Jan 27 Javascript
jQuery响应enter键的实现思路
Apr 18 Javascript
js实现密码强度检测【附示例】
Mar 30 Javascript
jQuery添加和删除输入文本框标签代码
May 20 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
Jan 13 Javascript
jQuery实现动态给table赋值的方法示例
Jul 04 jQuery
VUE长按事件需求详解
Oct 18 Javascript
你准备好迎接vue3.0了吗
Apr 28 Javascript
jQuery三组基本动画与自定义动画操作实例总结
May 09 jQuery
AngularJS基础 ng-value 指令简单示例
Aug 03 #Javascript
JS简单获取及显示当前时间的方法
Aug 03 #Javascript
AngularJS基础 ng-switch 指令简单示例
Aug 03 #Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
Aug 03 #Javascript
深入浅出讲解ES6的解构
Aug 03 #Javascript
JS模拟实现方法重载示例
Aug 03 #Javascript
jQuery数组处理函数整理
Aug 03 #Javascript
You might like
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
2007/09/04 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
React Router基础使用
2017/01/17 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
机器学习python实战之手写数字识别
2017/11/01 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
opencv python图像梯度实例详解
2020/02/04 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
在教室放鞭炮的检讨书
2014/09/28 职场文书
2016年公务员六五普法心得体会
2016/01/21 职场文书
聊聊redis-dump工具安装问题
2022/01/18 Redis
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android