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 相关文章推荐
js操作时间(年-月-日 时-分-秒 星期几)
Jun 20 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
AngularJs中route的使用方法和配置
Feb 04 Javascript
jQuery文字提示与图片提示效果实现方法
Jul 04 Javascript
灵活使用数组制作图片切换js实现
Jul 28 Javascript
Javascript OOP之面向对象
Jul 31 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
Aug 08 Javascript
jquery ui sortable拖拽后保存位置
Apr 27 jQuery
JavaScript中offsetWidth的bug及解决方法
May 17 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
Aug 09 jQuery
JQuery常见节点操作实例分析
May 15 jQuery
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页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
php图片上传类 附调用方法
2016/05/15 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
python中dir函数用法分析
2015/04/17 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
python pandas 时间日期的处理实现
2019/07/30 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
北大青鸟学生求职信
2013/09/24 职场文书
创业大赛策划书
2014/03/01 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js