IE、FF、Chrome浏览器中的JS差异介绍


Posted in Javascript onAugust 13, 2013

因为浏览器公司各自为利益考虑,到目前为止各浏览器的HTML标准或是JS标准都还未统一。在平常的开发中,我们常使用的JS框架基本已经帮我们处理好了JS在各浏览器中的差异,但作为一个开发人员,还是有需要了解JS在浏览器中的差异。

FF、Chrome:没有window.event对象
FF、Chrome:没有window.event对象,只有event对象,IE里只支持window.event,而其他主流浏览器两者都支持,所以一般写成:function handle(e){e = e || event;}

获取HTML元素
IE:支持el.name 、el.getAttribute(name)
FF、Chrome:基本属性支持el.name其余属性仅支持el.getAttribute(name)

自定义属性问题
IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用 getAttribute() 获取自定义属性;Firefox下,只能使用 getAttribute() 获取自定义属性。

Ajax请求
IE: new ActiveXObject()
FF、Chrome:new XMLHttpRequest()

获取HTML元素
IE:支持el.name 、el.getAttribute(name)
FF、Chrome:基本属性支持el.name其余属性仅支持el.getAttribute(name)

innerText的使用
FF不支持innerText,它支持textContent来实现innerText,不过textContent没有像innerText一样考虑元素的display方式,所以不完全与IE兼容。如果不用textContent,字符串里面不包含HTML代码也可以用innerHTML代替。
if(document.all){
document.getElementById('element').innerText = "mytext";
} else{
document.getElementById('element').textContent = "mytext";
}

获取鼠标指针的位置
计算出鼠标指针的位置对你来说可能是非常少见的,不过当你需要的时候,在IE和Firefox中的句法是不同的。这里所写出的代码将是最最基本的,也可能是某个复杂事件处理中的某一个部分。但他们可以解释其中的异同点。同时,必须指出的是结果相对于Firefox,IE会有更在的不同,这种方法本身就是有BUG的。
在IE中这样写:
var myCursorPosition = [0, 0];
myCursorPosition[0] = event.clientX;
myCursorPosition[1] = event.clientY;
在Firefox中这样写:
var myCursorPosition = [0, 0];
myCursorPosition[0] = event.pageX;
myCursorPosition[1] = event.pageY;

获取可见区域、窗口的大小
有时,我们会需要找到浏览器的可视位置的大小,通常我们称之为"可见区域"。
在IE中这样写:
var myBrowserSize = [0, 0];
myBrowserSize[0] = document.documentElement.clientWidth;
myBrowserSize[1] = document.documentElement.clientHeight;
在Firefox中这样写:
var myBrowserSize = [0, 0];
myBrowserSize[0] = window.innerWidth;
myBrowserSize[1] = window.innerHeight;

Alpha 透明
这并不是一个JavaScript句法问题,而是源自于CSS的Alpha透明。但当某个物体需要淡入/出则需要JavaScript来表现,这是通过访问CSS的Alpha透明设置来完成的,通常在一个循环中完成。你需要通过来修改的JavaScript的代码如下::
在IE中这样写:
#myElement { filter: alpha(opacity=50); }
在Firefox中这样写:
#myElement { opacity: 0.5; }
在IE中这样写:
var myObject = document.getElementById("myElement");
myObject.style.filter = "alpha(opacity=80)";
在Firefox中这样写:
var myObject = document.getElementById("myElement"); myObject.style.opacity = "0.5";

CSS "float" 值
访问一个给定CSS 值的最基本句法是:object.style.property,使用驼峰写法来替换有连接符的值,例如,访问某个ID为"header"的<div>的 background-color值,我们使用如下句法:
document.getElementById("header").style.backgroundColor= "#ccc";
但由于"float"这个词是一个JavaScript保留字,因此我们不能用object.style.float来访问,这里,我们可以在两种浏览器中这么做:
在IE中这样写:
document.getElementById("header").style.styleFloat = "left";
在Firefox中这样写:
document.getElementById("header").style.cssFloat = "left";

元素的推算样式
JavaScript可以使用object.style.property句法,方便地在外部访问和修改某个CSS样式,但其限制是这些句法只能取出已设的行内样式或者直接由JavaScript设定的样式。并不能访问某个外部的样式表。为了访问元素的"推算"样式,我们可以使用下面的代码:
在IE中这样写:
var myObject = document.getElementById("header");
var myStyle = myObject.currentStyle.backgroundColor;
在Firefox中这样写:
var myObject = document.getElementById("header");
var myComputedStyle = document.defaultView.getComputedStyle(myObject, null);
var myStyle = myComputedStyle.backgroundColor;

访问元素的"class"
"class"是JavaScript的一个保留字,在这两个浏览器中我们使用如下句法来访问"class"。
在IE中这样写:
var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("className");
在Firefox中这样写:
var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("class");

Javascript 相关文章推荐
在JavaScript中实现命名空间
Nov 23 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
Dec 07 Javascript
js chrome浏览器判断代码
Mar 28 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
Feb 17 Javascript
AngularJS在IE8的不支持的解决方法
May 13 Javascript
DOM中事件处理概览与原理的全面解析
Aug 16 Javascript
jQuery属性选择器用法示例
Sep 09 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
Mar 25 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
May 16 Javascript
微信小程序中this.data与this.setData的区别详解
Sep 17 Javascript
jQuery实现弹幕特效
Nov 29 jQuery
详解关于Vue单元测试的几个坑
Apr 26 Javascript
JavaScript的Module模式编程深入分析
Aug 13 #Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
Aug 13 #Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
Aug 13 #Javascript
js setTimeout 参数传递使用介绍
Aug 13 #Javascript
js setTimeout 常见问题小结
Aug 13 #Javascript
删除select中所有option选项jquery代码
Aug 12 #Javascript
js获取本机的外网/广域网ip地址完整源码
Aug 12 #Javascript
You might like
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
javascript hashtable实现代码
2009/10/13 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Python 多进程和数据传递的理解
2017/10/09 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
python计算两个数的百分比方法
2018/06/29 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
python IDLE添加行号显示教程
2020/04/25 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
判缓刑人员个人思想汇报
2014/10/10 职场文书
辞职信格式范文
2015/05/13 职场文书
工会经费申请报告
2015/05/15 职场文书
学历证明样本
2015/06/16 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL
mysql中关键词exists的用法实例详解
2022/06/10 MySQL
python如何读取和存储dict()与.json格式文件
2022/06/25 Python