日期:2014-05-16 浏览次数:20354 次
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>New Document</TITLE> <script type="text/javascript"> if(document.implementation && document.implementation.createDocument){ alert('运行了Mozilla'); /*因为Mozilla中不支持readyState和onreadystatechange特性 *所以要为Mozilla定义这些属性 */ Document.prototype.readyState = 0; Document.prototype.onreadystatechange = null; /*因为Mozilla中不能监听事件状态 *所以要为Mozilla创建监听事件状态私有方法 */ Document.prototype._changeReadyState_ = function(iReadyState){ this.readyState = iReadyState; if(typeof this.onreadystatechange == "function"){ this.onreadystatechange(); } }; //初始化错误变量 Document.prototype._initError_=function(){ this.parseError.errorCode = 0; this.parseError.filepos = -1; this.parseError.line = -1; this.parseError.linepos = -1; this.parseError.reason = null; this.parseError.srcText = null; this.parseError.url = null; }; /*为Document对象赋上_checkForErrors_私有原型属性 *判断是否XML解析错误,如果解析错误,得到各个错误信息 */ Document.prototype._checkForErrors_ = function(){ /* *因为Mozilla中如果解析XML错误后不会报错,而是直接显示出错误(判断oXmlDom.documentElement.tagName == *'parsererror')即可 */ if(this.documentElement.tagName == 'parsererror'){ var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column(\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/; reError.test(this.xml); this.parseError.errorCode = -999999; this.parseError.reason = RegExp.$1; this.parseError.url = RegExp.$2; this.parseError.line = parseInt(RegExp.$3); this.parseError.linepos = parseInt(RegExp.$4); this.parseError.srcText = RegExp.$5; } }; //Mozilla中五种状态的模拟,将字符串转化成xml Document.prototype.loadXML = function(sXml){ this._initError_(); //即将开始载入 this._changeReadyState(1); var oParser = new DOMParser(); //Mozilla中将字符串转化成xml对象 var oXmlDom = oParser.parseFromString(sXml,"text/xml"); //清空Docuemnt while(this.firstChild){ this.removeChild(this.firstChild); } for(var i=0;i<oXmlDom.childNodes.length;i++){ //将字符串转化的xml对象的结点导入到文档对象中 var oNewNode = this.importNode(oXmlDom.childNodes[i],true); this.appendChild(oNewNode); } //判断是否有错误 this._checkForErrors_(); //载入完成 this._changeReadyState(4); }; //Mozilla中原始load,直接读取xml文件,将Mozilla中本身拥有的load方法的引用存起来 Document.prototype._load_ = Document.prototype.load; //Mozilla中模拟load,定义新的Mozilla的load方法 Document.prototype.load = function(sURL){ //初始化错误 this._initError_(); this._changeReadyState_(1); //调用本身已有的load方法 this._load_(sURL); }; /*因为Mozilla没有Node.xml这个方法获得某个结点的xml字符串 *所以我们用Mozilla的_defineGetter_方法将xml特性和对应的方法绑定在一起 * */ Node.prototype.__defineGetter__('xml',function(){ var oSerializer = new XMLSerializer(); //将这个xml对象转换成字符串 return oSerializer.serializeToString(this,"text/xml"); }); } //此方法是从IE和Mozilla浏览器中得到xmldom对象,并返回xml对象oXmlDom function XmlDom(){ if(window.ActiveXObject){ alert('创建了IE的xml对象'); //IE中xml对象的各个版本 var arrSignatures =['MSXML2.DOMDocument.5.0','MSXML2.DOMDocument.4.0','MSXML2.DOMDocument.3.0','MSXMS2.DOMDocument','Microsoft.XmlDom']; for(var i=0;i < arrSignatures.length;i++){ try{ //IE中创建基于ActiveX的ActiveXObject对象 var oXmlDom = new ActiveXObject(arrSignatures[i]); return oXmlDom }catch(oError){ //抛出异常 throw new Error("无法创建IE的"+arrSignatures[i]+"版本的ActiveXObject对象"); } } }else if(document.implementation && document.implementation.createDocument){ alert('创建了Mozilla的xml对象'); //创建Mozilla的XML DOM对象 var oXmlDom = document.implementation.createDocument('','',null); /*IE中XML的错误特性是parseError,对parseError自身取值,返回的是errorCode代码,不等于0则表示没有错误 *因为Mozilla中如果解析XML错误后不会报错,而是直接显示出错误(判断oXmlDom.documentElement.tagName == *'parsererror') *所以要给Mozilla的XML对象创建parseError属性,并重写valueOf和toString方法 */ oXmlDom