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 相关文章推荐
从Ajax到JQuery Ajax学习
Feb 14 Javascript
IE下使用cloneNode注意事项分享
Nov 22 Javascript
jQuery性能优化的38个建议
Mar 04 Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 Javascript
jquery删除table当前行的实例代码
Oct 07 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
JavaScript中一些特殊的字符运算
Aug 17 Javascript
浅谈es6中export和export default的作用及区别
Feb 07 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
Mar 19 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
May 17 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 Javascript
解决VUEX的mapState/...mapState等取值问题
Jul 24 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
供参考的 php 学习提高路线分享
2011/10/23 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
javascript调试说明
2010/06/07 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
初步解析Python下的多进程编程
2015/04/28 Python
Python中扩展包的安装方法详解
2017/06/14 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
python flask框架实现重定向功能示例
2019/07/02 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
C语言笔试题
2014/09/04 面试题
幼儿园教师备课制度
2014/01/12 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
环保标语大全
2014/06/12 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
银行催款通知书
2015/04/17 职场文书
旷工辞退通知书
2015/04/17 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
企业财务管理制度范本
2015/08/04 职场文书
企业团队精神心得体会
2016/01/19 职场文书
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
nginx配置限速限流基于内置模块
2022/05/02 Servers