对于大多数程序员而言在平时的编码过程中很少会注意到跨浏览器的问题,而当这些问题从用户那边被抛回来后才知道原来问题还是很严重的。在正式规范、事实标准以及各种实现之间存在的差异会让你觉得很烦躁。所以就需要我们在平时养成良好的编码习惯,尽量保证我们的代码能够适应不同浏览器的要求。
下面就把平时遇到的一些浏览器差异问题总结出来,千里之行,始于足下。虽然不能完全避免开发中浏览器兼容问题,但是还是一点点的努力吧。
1、Ajax请求
IE: new ActiveXObject()
FF、Chrome:new XMLHttpRequest()
解决办法 统一封装创建XMLHttpRequest对象的方法
/**
* 创建兼容不同浏览器的XmlHttpRequest对象
* @return
*/
function createXmlHttpRequest(){
var xmlHttp ;
try{
//FF,Opera,Safari
xmlHttp = new XMLHttpRequest();
}catch(e){
try{
//支持IE6.0+
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
//支持IE5.5+
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
alert("提示: 您的浏览器暂时不支持Ajax请求!");
return false;
}
}
}
return xmlHttp;
}
2、XML解析处理
暂时解决不了。。。
3、集合类对象的()与[]的问题
IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象。
document.write(document.forms("formName").src);
//该写法在IE下能访问到Form对象的src属性
解决办法:将document.forms("formName")改为 document.forms["formName"]。统一使用[]获取集合类对象。
4、对浏览器Native组件调用属性、方法大小写问题
IE:不区分大小写
FF、Chrome:区分大小写
如:Ajax返回的response对象,IE支持response.responseXml和responseXML;FF等浏览器支持response.responseXML,解决办法只有在编写程序时尽量避免不兼容的写法。
5、document.all问题
暂未解决
6、window.event问题
IE:支持
FF、Chrome:不支持,只能通过参数传入方法
注意在不同浏览器中event对象api也不同。如IE下通过event.srcElement获得事件触发HTML元素,而FF、Chrome通过event.target获得。
解决方法:程序编写时避免,或是使用一些Ext、Jquery等JS类库来统一操作。
7、获取HTML元素
IE:支持el.name 、el.getAttribute(name)
FF、Chrome:基本属性支持el.name其余属性仅支持el.getAttribute(name)
解决方法: 统一采用标准方法el.getAttribute(name)获取
8、new Date().getYear()
分析原因:在IE中得到的日期是2011,在FF和Safari中看到的日期是111,原因是在FF和safari返回的是当前年份-1900的值。
兼容处理:
//方式一
var year= new Date().getYear();
year = (year<1900?(1900+year):year);
document.write(year);
//方式二
var year = new Date().getFullYear();
document.write(year);
9、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";
}
注:Safari和Chrome对innerText和textContent都支持。
10、Frame的引用
【分析原因】
IE可以通过id或者name访问这个frame对应的window对象;而FF只可以通过name来访问这个frame对应的window对象。
【应用场景】
在一个页面嵌套了一个iframe页面(下面简称父页面和子页面)。父页面取子页面的值。
<iframe id="frame_id" src="frametest.jsp" width="100%" height="100%" title="你好世界">
此时如果父页面想获取子页面例如div中的显示值,IE下可以这样写:
var obj = window.top.frame_id.document.getElementById(div_id);
alert(obj.innerText);
但是在FF中却无法取子页面中的值,原因就是FF只支持window.top.frameName来访问子页面中的window对象。所以在IE、safari中是支持通过frameName或是frameId来访问子页面window对象的。
解决方法:1、尽量都是用frameName去访问子页面window对象。
2、在FF、IE、Safari中都支持window.document.getElementById(frameId)来获得子页面window对象。
未完待续。。。欢迎补充。。。
分享到:
相关推荐
本文将详细介绍如何使用JavaScript解决浏览器兼容性问题,特别是针对XMLHttpRequest对象的创建及对不同版本IE浏览器的识别。 #### 二、XMLHttpRequest对象的兼容性创建 XMLHttpRequest对象是用于执行异步请求的...
二、JavaScript兼容性问题及解决方案 1. 使用现代JavaScript语法时,考虑老版本浏览器,如IE8及以下不支持ES5以上的特性。可以借助Babel这样的工具将新语法转换为旧浏览器能识别的ES5语法。 2. 对象检测:不同...
4. **JavaScript兼容性** - ECMAScript版本差异,如ES6及以上的新特性在老版本浏览器中可能不支持。 - 使用 `Babel` 转换器将ES6+代码转换为ES5,以保证向后兼容。 - `polyfill` 可以提供缺失的API或方法,使得...
标题中的“CSS在不同浏览器的兼容性问题”指的是在各种Web浏览器中,CSS(层叠样式表)的解析和执行存在差异,导致网页在不同浏览器上显示不一致的现象。这通常给前端开发者带来挑战,因为他们需要确保网页在所有...
Firefox、Chrome、Safari和Opera等浏览器的崛起,虽然在很大程度上促进了浏览器对标准的遵守,但也导致了不同浏览器间存在的差异,使得网页在不同浏览器上的表现不一致,这就是所谓的“浏览器兼容性问题”。...
以下将详细介绍在IE和Firefox等浏览器中常见的CSS和JavaScript兼容性问题,并提供解决方案。 ### CSS兼容性问题 #### 1. Float闭合(Clearing Float) Float闭合问题是指当父容器没有应用float属性时,其子元素...
在进行网页开发时,经常会遇到浏览器兼容性问题,尤其是在使用JavaScript编程语言的时候。不同浏览器之间的差异可能会影响到代码的正常运行。因此,解决这些兼容性问题就成为了网页开发者们必须面对的一个挑战。 ...
浏览器兼容性问题主要源于不同浏览器对Web标准的实现不一致,尤其是在早期Web发展的阶段,各大浏览器厂商如Internet Explorer、Firefox、Safari、Chrome等都有自己的内核和解析规则,导致在不同浏览器上展示同一网页...
然而,由于各个浏览器的实现差异,JavaScript在不同浏览器上的兼容性问题一直是开发者面临的一大挑战。本文将深入探讨如何解决JavaScript在Firefox(FF)和Internet Explorer(IE)等浏览器之间的兼容性问题。 首先...
上述内容总结了常见的一些兼容性问题及其解决方案,为开发者提供了一份参考资料,以便更有效地编写跨浏览器的JavaScript代码。需要注意的是,随着浏览器的不断更新和升级,以及新标准的逐步推广,一些兼容性问题可能...
脚本问题则聚焦于JavaScript的兼容性,比如DOM操作、Date.getYear方法以及scrollTop属性在不同浏览器中的差异。此外,每个浏览器都有其独特的特性或bug,如Internet Explorer的盒模型问题、filter特效和behavior及...
总结,"CSS浏览器兼容性速查"是开发者解决问题的关键工具,通过理解和掌握不同浏览器对CSS的支持情况,我们可以编写出既能展示美观设计,又能保证兼容性的代码,从而提升用户体验。这需要不断学习和实践,随着浏览器...
2. **JavaScript兼容性**:新版本的JavaScript语法在旧版浏览器中可能无法运行,需要使用polyfills或Babel等工具进行转换。 3. **DOM操作差异**:每个浏览器对DOM的处理方式略有不同,可能导致某些JavaScript代码在...
- **JavaScript兼容性检查**:检测JavaScript代码在不同浏览器上的执行情况,指出可能存在的兼容性问题。 - **自动化测试**:通过预设的测试用例,自动运行并报告兼容性问题。 - **代码修复建议**:提供解决兼容性...
JavaScript兼容性是Web开发中的一个重要话题,特别是在处理不同的浏览器,如Firefox和Internet Explorer时。由于JavaScript引擎在不同浏览器上的实现存在差异,开发者需要理解和解决这些兼容性问题,以确保他们的...
总结,JavaScript 兼容性问题主要集中在函数和方法差异、样式访问和设置、事件处理、DOM 操作以及 BOM。解决这些问题通常需要通过条件判断或使用兼容性库如 jQuery,以确保代码在多种浏览器环境下能正常工作。理解并...