浏览 2734 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-27
最后修改:2010-06-03
<!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.parseError = { //直接返回错误代码 valueOf:function(){ return this.errorCode; }, //返回错误信息 toString:function(){ return this.errorCod.toString() } }; /*当IE和Mozilla的XML对象都有parseError属性后 *初始化parseError的各个属性的初始值 */ oXmlDom._initError_(); /*因为Mozilla的load没有改变事件状态,所以我们自己加上事件状态部分 *在Mozilla的对象创建完后,调用load方法时,如果成功将状态改为4,即完全加载完成状态 */ oXmlDom.addEventListener("load",function(){ this._checkForErrors_(); this._changeReadyState_(4); },false); return oXmlDom; }else{ throw new Error("Your browser doesn't support an XML DOM object"); } } var oXmlDom = new XmlDom(); oXmlDom.onreadystatechange = function(){ alert('事件状态监听:'+oXmlDom.readyState); if(oXmlDom.readyState == 4){ if(oXmlDom.parseError !=0){ alert('错误信息\n'+oXmlDom.parseError); var oError = oXmlDom.parseError; alert('An error occurred:\nError Cod:'+oError.errorCode+'\nLine:'+oError.line+'\nLine Pos:'+oError.linepos+'\nReason:'+oError.reason); }else{ alert('加载成功'); } } } oXmlDom.async = false; oXmlDom.load('test.xml'); alert('将oXmlDom对象转换成字符串:\n'+oXmlDom.xml); </script> </HEAD> <BODY> <input type="text" value="123"></input> </BODY> </HTML> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-27
建议代码美化一下
|
|
返回顶楼 | |
发表时间:2010-05-31
不知道怎么在这个里面美化呢,呵呵!
|
|
返回顶楼 | |