1. 程式人生 > >跨瀏覽器處理xml 相容IE

跨瀏覽器處理xml 相容IE

/**
 * 1.跨瀏覽器處理xml
 * 2.load方法只有IE,firefox,opera支援,所有無法跨瀏覽器
 * 3.xmldom物件順序問題,先進行先進的dom2,再去判斷其他的IE
 * 4.不同瀏覽器不同的序列化操作
 * 5.不同報錯,進行不同的報錯機制
 */

/**
 * 1.跨瀏覽器獲取xmldom
 */
function getXMLDOM(xmlStr) {
    var xmlDom = null;

    // 標準的w3c瀏覽器建立DOMParser物件
    if (typeof window.DOMParser != 'undefined') {
        // DOMParser物件中的方法parseFromString();接收兩個引數來建立xmldom物件
xmlDom = (new DOMParser()).parseFromString(xmlStr, 'text/xml'); // 如果產生錯誤會是一個新的文件parsererror // HTMLCollection[parsererror] // 錯誤文件是<parsererror>這裡是內容</pasererror> var errors = xmlDom.getElementsByTagName('parsererror'); console.log(errors); if
(errors.length > 0) { throw new Error('XML解析錯誤:' + errors[0].firstChild.nodeValue); } } else if (typeof window.ActiveXObject != 'undefinded') { // IE8和以下 var version = [ // 版本順序6.0推薦並且穩定,3.0最低推薦,最後一個特殊情況下用的 'MSXML2.DOMDocument6.0'
, 'MSXML2.DOMDocument3.0', 'MSXML2.DOMDocument' ]; for (var i = 0, len = version.length; i < len; i++) { try { // 判斷支援哪個版本 var xmlDom = new ActiveXObject(version[i]); } catch (e) {} } // 載入xml字串 xmlDom.loadXML(xmlStr); // IE8和以下錯誤屬性物件parseError // 這個屬性有多個物件 // errorCode發生錯誤型別代號 // filepos發生錯誤檔案中的位置 // line錯誤行號 // linepos錯誤行號,那一行上的字元的位置 // resion錯誤的解釋原因 // alert(xmlDom.parseError); // 等於0的時候才是正確的xml字串 if (xmlDom.parseError != 0) { throw new Error('XML解析錯誤:' + xmlDom.parseError.reason); } } else { throw new Error('您的系統或瀏覽器不支援xmldom!'); } return xmlDom; } // alert(getXMLDOM('<root><user>鄧志強getXMLDOM</user></root>').documentElement.tagName); // alert(window.DOMParser); //PS:為了跨越所有瀏覽器相容,我們放棄了從外部載入XML檔案,而使用了字串XML載入和序列化。 function serializerXML(xmlDom) { var xml = ''; // w3c的XMLSerializer序列化方法 // new XMLSerializer()建立一個序列化物件 // 序列化xmldom物件 if (typeof window.XMLSerializer != 'undefined') { xml = (new XMLSerializer()).serializeToString(xmlDom); } else if (typeof xmlDom.xml != 'undefined') { // IE的序列化方法 xml = xmlDom.xml; } return xml; } getXMLDOM('<root><user>鄧志強getXMLDOM</user></root>');