做了一个web方式的GPS车载定位系统,用到了自己写了个Ajax处理类,客户端界面Ext 2.0,后台C#写的一个服务器(后台服务器已经做好了不用管)。系统开发前期,本来打算将IE、FireFox做兼容,但是在FireFox做测试时,出现了问题。客户端向服务器发送指令成功,但是不能接受响应消息(IE没有问题)。
这段时间,做为一个Web方式的系统,我个人觉得必须兼容2种以上的主流浏览器。所以Firefox的兼容是必须的。
这个Ajax类是兼容IE,FireFox:
var Ajax=function(){ this.http_request=false; return{ init:function(){ this.createAjaxObj(); }, createAjaxObj:function(){ //创建XMLHttpRequest实例 if (window.XMLHttpRequest) { //Mozilla 浏览器 this.http_request = new XMLHttpRequest(); if (this.http_request.overrideMimeType) {//设置MiME类别 this.http_request.overrideMimeType("text/xml"); } }else if (window.ActiveXObject) { // IE浏览器 try { this.http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { this.http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { } } } if (!this.http_request) { // 异常,创建对象实例失败 //"不能创建XMLHttpRequest对象实例" window.alert("不能创建XMLHttpRequest对象实例.."); return false; } }, sendRequest:function(method,url,content){ // 确定发送请求的方式和URL以及是否异步执行下段代码 if (method.toLowerCase() == "get") { if(navigator.userAgent.indexOf("MSIE")<=0){ netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } this.http_request.open(method, url, false); this.http_request.send(null); } else { if (method.toLowerCase() == "post") { this.http_request.open(method, url, false); this.http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); this.http_request.send(content); } else { //http请求类别参数错误 window.alert("http请求类别参数错误.."); return false; } } //开始发起浏览请求 // 请求已完成 if (this.http_request.readyState == 4) { // 信息已经成功返回,开始处理信息 if (this.http_request.status == 200) { //返回的是文本格式信息 return this.http_request.responseText; //返回的XML格式文档就用alert(http_request.responseXML); } else { //页面不正常 //"您所请求的页面有异常" alert("您所请求的页面有异常"); } } }, processResponse:function(){ }, addParamsGET:function(sURL,key,value) { sURL+=(sURL.indexOf("?")==-1?"?":"&"); sURL+=(key+"="+value); return sURL; }, addParamsPOST:function(key,value){ var params="&"; params+=(key+"="+value); return params; }, getTime:function(){ var DateTime=new Date(); return DateTime.getFullYear()+"-"+(DateTime.getMonth()+1)+"-"+DateTime.getDate()+" "+DateTime.getHours()+":"+DateTime.getMinutes()+":"+DateTime.getSeconds(); } }; }
前段时间不兼容的原因,是因为没有设置Firefox的数据访问权限.(跨域)
解决方法:
打开FireFox-->about:config-->signed.applets.codebase_principal_support设置为true;
在xmlHttp.open("GET",url,false)方法之前加以下代码:
//如果不是IE浏览器就执行
if(navigator.userAgent.indexOf("MSIE")<=0){
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
}