最近在实习的公司做了一个用户注册管理系统的系统,因为这个小项目是我单独负责的,部署到公司的服务器上,出现了一些浏览器的适配问题。逼到最后,我们降低了用户管理界面的需求,让其只支持火狐和Chorme及其支持它们内核的浏览器。客户注册页面实现了支持IE,火狐,Chrome等主流浏览器。下面谈谈遇到的小坑。
首先是发ajax请求给后台,我用的最原始的提交方式,最后实现从后台取到一段json填充表格。
function createXMLHttpRequest()
{
var xmlHttp=false;
if (window.ActiveXObject) { //在IE浏览器中创建XMLHttpRequest对象
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(ee) {
xmlHttp=false;
}
}
} else if (window.XMLHttpRequest) { //在非IE浏览器中创建XMLHttpRequest对象
try {
xmlHttp = new XMLHttpRequest();
} catch(e) {
xmlHttp=false;
}
}
return xmlHttp;
}
xmlhttp=createXMLHttpRequest(); //调用创建XMLHttpRequest对象的方法
xmlhttp.open("post","sm"); //向服务器端发送请求
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send(data);
看来IE的确是个特殊的存在,它是所有前端开发的眼中钉,肉中刺。国内浏览器大多采用奇怪的双内核模式,如360浏览器就采用IE和Chrome双内核,好像到网银支付时自动转换到成IE内核,实在是蜜汁转换。后面还有个bootstrap datetimepicker插件不支持火狐浏览器,后面改了下插件源码:
将第112行报错处改为this.defaultTimeZone = 'GMT '+(new Date()).getTimezoneOffset()/60;
实现了日期选择插件多浏览器兼容
后面还有xmlhttp在服务器端应用send方法出现错误的现象,正在着力解决。