resource_cache_wev8.js
6.5 KB
var wevCacheLastVersion = "2016_04_07_01";
var basicResourceConfig = [
{url : "/mobilemode/js/zepto/zepto.min_wev8.js", version : 2},
{url : "/mobilemode/js/fastclick/fastclick.min_wev8.js", version : 1},
{url : "/mobilemode/js/mec/run/List_wev8.js", version : 1},
{url : "/mobilemode/js/echarts/echarts.common.min.js", version : 1}
];
var wevCachePrefix = "MobilemodeCache";
var wevCacheKey = wevCachePrefix + "_" + wevCacheLastVersion;
var wevCacheUnSupports=!window.localStorage;function HttpRequestObject(){this.chunnel=null;this.instance=null}function HttpGetObject(){this.url=null;this.cache_key=null;this.chunnel=null;this.type=null;this.is_fill=false;this.is_exec=false;this.cached=true;this.content=""}function clearOldCache(){if(wevCacheUnSupports){return}for(var i=localStorage.length-1;i>=0;i--){var name=localStorage.key(i);if(name.indexOf(wevCachePrefix)==0&&name.indexOf(wevCacheKey)==-1){localStorage.removeItem(name)}}}function clearOneOldCache(url){if(wevCacheUnSupports){return}for(var i=localStorage.length-1;i>=0;i--){var name=localStorage.key(i);if(name.indexOf(wevCachePrefix)==0&&name.indexOf(url)!=-1){localStorage.removeItem(name)}}}var Request=new function(){clearOldCache();this.httpRequestCache=new Array();this.createInstance=function(){var instance=null;if(window.XMLHttpRequest){instance=new XMLHttpRequest();if(instance.overrideMimeType){instance.overrideMimeType="text/xml"}}else{if(window.ActiveXObject){var MSXML=["MSXML2.XMLHTTP.5.0","Microsoft.XMLHTTP","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"];for(var i=0;i<MSXML.length;i++){try{instance=new ActiveXObject(MSXML[i]);break}catch(e){}}}}return instance};this.getInstance=function(_chunnel){var instance=null;var object=null;if(_chunnel==undefined){_chunnel="default"}var getOne=false;for(var i=0;i<this.httpRequestCache;i++){object=HttpRequestObject(this.httpRequestCache[i]);if(object.chunnel==_chunnel){if(object.instance.readyState==0||object.instance.readyState==4){instance=object.instance}getOne=true;break}}if(!getOne){object=new HttpRequestObject();object.chunnel=_chunnel;object.instance=this.createInstance();this.httpRequestCache.push(object);instance=object.instance}return instance};this.send=function(_url,_data,_processRequest,_chunnel,_asynchronous,_paraObj){if(_url.length==0||_url.indexOf("?")==0){alert("由于目的为空,请求失败,请检查!");return}if(_chunnel==undefined||_chunnel==""){_chunnel="default"}if(_asynchronous==undefined){_asynchronous=true}var instance=this.getInstance(_chunnel);if(instance==null){alert("浏览器不支持ajax,请检查!");return}if(_asynchronous==true&&typeof(_processRequest)=="function"){instance.onreadystatechange=function(){if(instance.readyState==4){if(instance.status==200){_processRequest(instance,_paraObj)}else{alert("您所请求的页面有异常,请检查!")}}}}if(_url.indexOf("?")!=-1){_url+="&requestTime="+(new Date()).getTime()}else{_url+="?requestTime="+(new Date()).getTime()}if(_data.length==0){instance.open("GET",_url,_asynchronous);instance.send(null)}else{instance.open("POST",_url,_asynchronous);instance.setRequestHeader("Content-Length",_data.length);instance.setRequestHeader("Content-Type","application/x-www-form-urlencoded");instance.send(_data)}if(_asynchronous==false&&typeof(_processRequest)=="function"){_processRequest(instance,_paraObj)}}};var MResourceCache=new function(){this.needLoadObject=new Array();this.envPath=null;this.fileName="resource_cache_wev8.js";this.getPath=function(){this.envPath=document.location.pathname;this.envPath=this.envPath.substring(0,this.envPath.lastIndexOf("/")+1);var _scripts=document.getElementsByTagName("script");var _envPath=null;var _scriptSrc=null;for(var i=0;i<_scripts.length;i++){_scriptSrc=_scripts[i].getAttribute("src");if(_scriptSrc&&_scriptSrc.indexOf(this.fileName)!=-1){break}}if(_scriptSrc!=null){if(_scriptSrc.charAt(0)=="/"){this.envPath=_scriptSrc.substring(0,_scriptSrc.lastIndexOf("/")+1)}else{this.envPath=this.envPath+_scriptSrc.substring(0,_scriptSrc.lastIndexOf("/")+1)}}};this.getPath();this.getFileExt=function(fileUrl){var d=/\.[^\.]+$/.exec(fileUrl);d=d.toString().toLowerCase();var index=d.indexOf("?");if(index!=-1){d=d.substring(0,index)}return d};this.getVersion=function(url){var version="";for(var i=0;i<basicResourceConfig.length;i++){var url2=basicResourceConfig[i].url;if(url.indexOf(url2)!=-1){version=basicResourceConfig[i].version;break}}return version};this.getShortUrl=function(url){var index=url.indexOf("?");if(index!=-1){url=url.substring(0,index)}return url};this.pushNeedLoad=function(url){var _absUrl=null;if(url.charAt(0)=="/"){_absUrl=url}else{_absUrl=this.envPath+url}var object=new HttpGetObject();object.url=_absUrl;var version=this.getVersion(_absUrl);if(version!=""){if(_absUrl.indexOf("?")!=-1){version="&v="+version}else{version="?v="+version}}object.cache_key=wevCacheKey+_absUrl+version;object.chunnel="ch"+(this.needLoadObject.length+1);object.type=this.getFileExt(_absUrl);if(window.localStorage){var cacheContent=localStorage.getItem(object.cache_key);if(cacheContent){object.is_fill=true}else{var shortUrl=this.getShortUrl(_absUrl);clearOneOldCache(shortUrl)}}this.needLoadObject.push(object);return this};this.batchLoad=function(){var that=this;for(var i=0;i<this.needLoadObject.length;i++){var item=this.needLoadObject[i];var processGet=function(_instance,_paraObj){var content=that.trim(_instance.responseText);if(content.indexOf(":Error:")==0){_paraObj.is_exec=true;var errorMsg=content.substring(":Error:".length);
alert(errorMsg);return}try{if(wevCacheUnSupports){throw"浏览器不支持localStorage"}localStorage.setItem(_paraObj.cache_key,content);_paraObj.is_fill=true}catch(e){console.warn(_paraObj.url+"["+e+"]");_paraObj.cached=false;_paraObj.content=content;_paraObj.is_fill=true}};if(item.is_fill==false){var sendUrl=item.url;sendUrl="/mobilemode/resourceLoader.jsp?url="+sendUrl;Request.send(sendUrl,"",processGet,item.chunnel,false,item)}}return this};this.trim=function(str){return str.replace(/(^\s*)|(\s*$)/g,"")};this.runCss=function(_css){if(_css==null||_css==""){return}document.write('<style type="text/css">'+_css+"</style>")};this.runJs=function(_js){if(_js==null||_js==""){return}if(window.execScript){window.execScript(_js)}else{window.eval(_js)}};this.batchExec=function(){for(var i=0;i<this.needLoadObject.length;i++){var item=this.needLoadObject[i];if(item.is_exec==false){var content;if(item.cached){content=localStorage.getItem(item.cache_key)}else{content=item.content}if(item.type==".js"){this.runJs(content);item.is_exec=true}else{if(item.type==".css"){this.runCss(content);item.is_exec=true}}}}}};