摘要:兼容跨平臺解決方案目前對于的支持,是比較完善的,很多開發平臺也借助于內核,所以使用開發是一個很不錯的選中。當異步請求時,的這個值是至關重要的,它表示請求響應過程的當前活動階段。狀態為時,為成功的標志。
[TOC]
兼容IE跨平臺解決方案事件兼容目前對于es5的支持,chrome是比較完善的,很多開發平臺也借助于webkit內核,所以使用chrome開發是一個很不錯的選中。但是ie8-多個版本的兼容性也是讓無數程序員頭疼的事,那么下面會針對幾種比較典型的兼容做下總結,該總結多數參考js高級編程內部源碼和自身遇到的一些兼容問題,剛開始撰寫此類博客,希望大家多多指出問題。
code如下
window.ct = {}; (function(NS){ var EventUtil = { addHandler:function(element, type, handler){ if(element.addEventListener){ element.addEventListener(type,handler,false);//Chrome支持 } else if(element.attachEvent){ element.attacheEvent("on" + type, handler);//IE9+支持 }else{ element["on" + type] = handler;//IE8-支持 } }, removeHandler:function(element, type, handler){ if(element.removeEventListener){ element.removeEventListener(type, handler, false);//Chrome支持 }else if(element.detachEvent){ element.detachEvent("on" + type, handler);//IE9+支持 }else{ element["on" + type] = null;//IE8-支持 } }, getEvent:function(event){ return event ? event : window.event; }, getTarget:function(event){ return event.target || event.srcElement; }, preventDefault:function(event){ if(event.preventDefault){ event.preventDefault(); }else{ event.returnValue = false; } }, stopPropagation:function(event){ if(event.stopPropagation){ event.stopPropagation(); }else{ event.cancelBubble = true; } } } NS.EventUtil = EventUtil; })(window.ct);XPath兼容
window.ct = {}; (function(NS){ var createDocument = function(){ if(typeof arguments.callee.activeXArg != "string"){ var versions = ["MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument"], i, len; for(i=0, len=versions.length; i< len; i++){ try{ new ActiveXObject(versions[i]); arguments.callee.activeXArg = versions[i]; break; }catch(e){ //step } } } return new ActiveXObject(arguments.callee.ActiveXArg); } var parseXml = function(xml){ var xmldom = null; if(typeof DOMParser != "undefined"){ xmldom = (new DOMParser()).parseFromString(xml,"text/xml"); var errors = xmldom.getElementsByTagName("parsererror"); if(errors.length){ throw new Error("XML parsing error: " + error[0].textContent); } }else if(typeof ActiveXObject != "undefined"){ xmldom = createDocument(); xmldom.loadXML(xml); if(xmldom.parseError != 0){ throw new Error("XML parsing error: " + xmldom.parserError.reason); } }else{ throw new Error("No XML parser avaiable"); } return xmldom; } var serializeXml = function(xmldom){ if(typeof XMLSerializer != "undefined"){ return (new XMLSerializer()).serialToString(xmldom); }else if(typeof xmldom.xml != "undefined"){ return xmldom.xml; }else{ throw new Error("Could not serialize XML DOM."); } } var selectSingleNode = function(context, expression, namespaces){ var doc = (context.nodeType != 9 ? context.ownerDocument : context); if(typeof doc.evaluate != "undefined"){ var nsresolver = null; if(namespaces instanceof Objectt){ nsresolver = function(prefix){ return namespaces[prefix]; } } var result = doc.evaluate(expression, context, nsresolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null); return (result != null ? result.singleNodeValue : null); } } var selectNodes = function(context, expression, namespaces){ var doc = (context.nodeType != 9 ? context.ownerDocument : context); if(typeof doc.evaluate != "undefined"){ var nsresolver = null; if(namespaces instanceof Object){ nsresolver = function(prefix){ return namespaces[prefix]; } } var result = doc.evaluate(expression, context, nsresolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var nodes = new Array(); if(result != null){ for(var i=0,len=result.snapshotLength;iXMLRequestHttp兼容 XMLRequestHttp各個瀏覽器支持情況
IE7+,Firefox,Opera,Chrome和Safari支持原生XMLRequestHttponreadystatechange運行
下面的代碼中onreadystatechange中會直接使用XHR,這樣的處理方式是DOM0級方法為XHR對象添加了事件處理程序,原因是并不是所有的瀏覽器都輝支持DOM2級方法,所以有的瀏覽器內部處理此事件時,可能不會向其傳遞event事件對象,那么為了所有平臺都兼容,最好的處理方式就是使用XHR對象本身來確定下一步應該會怎么做。注意:此方法建議在open之前調用readyState幾種狀態的講解
對于XHR請求,絕大多數情況下都會使用異步請求。 當異步請求時,readyState的這個值是至關重要的,它表示請求響應過程的當前活動階段。0:未初始化,尚未調用open方法;1:啟動,已經調用open方法,但未調用send方法;2:發送 已經調用send方法,但尚未接到服務端相應; 3:接收,但是只接收了部分響應;4:完成,已經接收了全部響應數據,二期已經可以在客戶端使用了state幾種狀態值的講解
在接收響應后,我們認為是readyState數值為4時為最佳判斷state時機。這時不得不普及一下HTTP響應值state的意義。狀態為200時,為成功的標志。此時responseText的內容已經準備就緒,而且在內容類型正確的情況下,responseXML也應該能夠訪問了。如果狀態代碼304標識請求的資源并沒有被修改,可以直接使用瀏覽器的緩存版本。open方法的講解
接受3個參數,第一個是請求類型get或者post;第二個是url;第三個表示是否異步。另外需要說明兩點:意識URL相對于執行代碼的當前頁面(可以使用絕對路徑);而是open方法并不會真正發送請求。send方法的講解
send方法只接受一個參數,作為請求主體發送的數據,如果不需要通過請求主體(即post),則必須傳入null,這個參數對于瀏覽器是必須的。調用send后,請求會發送到服務器上進行處理。window.ct = {}; (function(NS){ var createXHR = function(){ if(typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); }else if(typeof ActiveXObject != "undefined"){ if(typeof arguments.callee.activeXString != "string"){ var versions = ["MSXML.XMLHttp.6.0","MSXML.XMLHttp.3.0","MSXML.XMLHttp"], i,len; for(i=0,len=version.length;i= 200 && xhr.status < 300 || xhr.status == 304){ console.info("successful responseText: " + xhr.responseText) }else{ console.error("Request was unsuccessful: " + xhr.status); } } } xhr.open("get","url",true); xhr.send(null); })(window.ct);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86641.html
摘要:也能使用更復雜的,更頁面增加更強的效果。這是因為當頂級頁面設置為或,里面的頁面設置不起作用,它的文檔模式顯示的是。參考參考使用來搞定瀏覽器兼容模式強制標準模式標準模式與兼容模式設置背景 因為歷史原因,之前很多的系統都會是 頂級頁面+Iframe來加載子級頁面的這種模式構件系統,而且系統都只能運行在IE6或者IE 高版本兼容模式下(IE 7模式)。 隨著現在的審美原來越高,腳本能里越來越強,...
摘要:此模塊包含的設計思路即為預以匹配降級方案。沒有默認編譯該模塊,以及利用該模塊判斷后提供平臺相關邏輯的主要原因在于其設計原則的代碼完成核心的功能。此處,也引出了代碼實現的另一個基本原則面向功能標準,先功能覆蓋再優雅降級。 在進入 Zepto Core 模塊代碼之前,本節簡略列舉 Zepto 及其他開源庫中一些 Polyfill 的設計思路與實現技巧。 涉及模塊:IE/IOS 3/Dete...
閱讀 2975·2021-11-16 11:51
閱讀 2608·2021-09-22 15:02
閱讀 3723·2021-08-04 10:21
閱讀 3605·2019-08-30 15:43
閱讀 1947·2019-08-30 11:04
閱讀 3599·2019-08-29 17:14
閱讀 490·2019-08-29 12:16
閱讀 2933·2019-08-28 18:31