ipu的trunk版的android工程和服务端工程。

wade-mobile.js 13KB

    /** * 与客户端交互的基础API */ define(["jcl","base64","util","res/js/mobile/expand-mobile.js","biz/js/common/biz-mobile.js"],function(Wade,Base64) { //终端类型,a为android,i为ios var terminalType = (function(){ var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad = sUserAgent.match(/ipad/i) == "ipad"; var bIsIphone = sUserAgent.match(/iphone os/i) == "iphone os"; var bIsAndroid = sUserAgent.match(/android/i) == "android"; var bIsWinphone = sUserAgent.match(/windows phone /i) == "windows phone " || sUserAgent.match(/windows phone os /i) == "windows phone os "; if(bIsAndroid){ return "a"; }else if(bIsIpad||bIsIphone){ return "i"; }else{ return null; } })(); WadeMobile = (function(){ return{ isApp:function(){//判断是否是APP应用 return window["PluginManager"] || terminalType=="i"; },getTerminalType:function(callback,err){ WadeMobile.callback.storageCallback("getTerminalType",callback); execute("getTerminalType", [], err); },getSysInfo:function(callback,key,err){//TELNUMBER|IMEI|IMSI|SDKVERSION|OSVERSION|PLATFORM|SIMNUMBER WadeMobile.callback.storageCallback("getSysInfo",callback); execute("getSysInfo", [key],err); },close:function(confirm,err){ if(typeof(confirm)!="boolean"){ confirm = true; } execute("close", [confirm],err); },httpRequest:function(callback,requestUrl,isEscape,encode,conTimeout,readTimeout,err){ if (isEscape == undefined) { isEscape = true; } if(terminalType=="i"){ requestUrl = encodeURIComponent(requestUrl); } WadeMobile.callback.storageCallback("httpRequest",callback,isEscape); execute("httpRequest", [requestUrl,isEscape,encode,conTimeout,readTimeout],err); },dataRequest:function(callback,dataAction,param,isEscape,encode,conTimeout,readTimeout,err){ if (isEscape == undefined) { isEscape = true; } WadeMobile.callback.storageCallback("dataRequest",callback,isEscape); execute("dataRequest", [dataAction,param,isEscape,encode,conTimeout,readTimeout],err); },openUrl:function(url,err){ execute("openUrl", [encodeURIComponent(url)],err); },openPage:function(action,data,err){ execute("openPage", [action,data],err); },openTemplate:function(action,context,err){ execute("openTemplate", [action,context],err); },back:function(err){ execute("back", [],err); },getPage:function(callback,action,param,err){ var isEscape = true; WadeMobile.callback.storageCallback("getPage",callback,isEscape); execute("getPage", [action,param,isEscape],err); },getTemplate:function(callback,action,context,err){ var isEscape = true; WadeMobile.callback.storageCallback("getTemplate",callback,isEscape); execute("getTemplate", [action,context,isEscape],err); },storageDataByThread:function(dataAction,param,waitoutTime,err){ execute("storageDataByThread", [dataAction,param,waitoutTime],err); },openDialog:function(callback,pageAction,param,width,height,isEscape,err){ if (isEscape == undefined) { isEscape = true; } WadeMobile.callback.storageCallback("openDialog",callback,isEscape); execute("openDialog", [pageAction,param,width,height,isEscape],err); },closeDialog:function(result,state,err){ execute("closeDialog", [result,state],err); },openWindow:function(callback,pageAction,param,isEscape,err){ if (isEscape == undefined) { isEscape = true; } WadeMobile.callback.storageCallback("openWindow",callback,isEscape); execute("openWindow", [pageAction,param,isEscape],err); },closeWindow:function(result,state,err){ execute("closeWindow", [result,state],err); },openSlidingMenu:function(callback,action,param,width,height,leftMargin,topMargin,isEscape,err){ WadeMobile.callback.storageCallback("openSlidingMenu",callback,isEscape); execute("openSlidingMenu", [action,param,width,height,leftMargin,topMargin,isEscape],err); },closeSlidingMenu:function(result,state,err){ execute("closeSlidingMenu", [result,state],err); } }; })(); //全局变量 var callbackId = 0; var callbacks = {};//用来存放成功和失败的js回调函数 var callbackDefine = {};//用来存放自定义的js回调函数 var globalErrorKey = null;//全局错误关键字,定位错误 /*绝大多数情况下,success回调函数是用不上的,有需要回调函数的时候异步方式传入取值*/ var execute = function(action, args, error, success){ args = stringify(args); if(terminalType=="a"){ androidExecute(action, args, error, success); }else if(terminalType=="i"){ iosExecute(action, args, error, success); }else if(terminalType=="w"){ winphoneExecute(action, args, error, success); }else{ //alert("无终端类型"); //iosExecute(action, args, error, success); } }; WadeMobile.execute = execute; var androidExecute = function(action, args, error, success){ var callbackKey = globalErrorKey = action+callbackId++; if (success || error) { callbacks[callbackKey] = {success:success, error:error}; } if(WadeMobile.debug){ //alert("准备调用"+action+" 参数:"+args); console.log("action:"+action+" param:"+args); } PluginManager.exec(action, callbackKey, args); globalErrorKey = null; }; var iosExecute = function(action, args, error, success){ var callbackKey = globalErrorKey = action+callbackId++; if (success || error) { callbacks[callbackKey] = {success:success, error:error}; } if(WadeMobile.debug){ //alert("准备调用"+action+" 参数:"+args); console.log("action:"+action+" param:"+args); } var WADE_SCHEME = "wade://"; var url = WADE_SCHEME+action+"?param="+args+"&callback="+callbackKey; //一个动作请求客户端的最大数量,超过会造成请求覆盖 var limitAction = 10; var ifrmName = "WADE_FRAME_"+(callbackId%limitAction); var ifrm = document.getElementById(ifrmName); if(!ifrm){ var ifrm = document.createElement("iframe"); ifrm.setAttribute("id",ifrmName); ifrm.setAttribute("width","0"); ifrm.setAttribute("height","0"); ifrm.setAttribute("border","0"); ifrm.setAttribute("frameBorder","0"); ifrm.setAttribute("name",ifrmName); document.body.appendChild(ifrm); } document.getElementById(ifrmName).src = encodeURI(url); //document.getElementById(ifrmName).contentWindow.location = encodeURI(invocation); globalErrorKey = null; }; var winphoneExecute = function(action, args, error, success){ var callbackKey = globalErrorKey = action+callbackId++; if (success || error) { callbacks[callbackKey] = {success:success, error:error}; } if(WadeMobile.debug){ //alert("准备调用"+action+" 参数:"+args); console.log("action:"+action+" param:"+args); } window.external.Notify(stringify([action, callbackKey, args])); //[action, callbackKey, args] globalErrorKey = null; }; WadeMobile.callback = (function(){ return{ success:function(callbackKey, message) { if(typeof message == "undefined"){ return; } if (callbacks[callbackKey]) { if (callbacks[callbackKey].success) { if(typeof callbacks[callbackKey].success==="function"){ var func = callbacks[callbackKey].success; func(message); }else{ _eval(callbacks[callbackKey].success+"('"+message+"','"+callbackKey+"')"); } } if (callbacks[callbackKey]) { delete callbacks[callbackKey]; } } },error:function(callbackKey, message) { if(typeof message == "undefined"){ return; } if (callbacks[callbackKey]) { if (callbacks[callbackKey].error) { if(typeof callbacks[callbackKey].error==="function"){ var func = callbacks[callbackKey].error; func(message); }else{ _eval(callbacks[callbackKey].error+"('"+message+"','"+callbackKey+"')"); } } if (callbacks[callbackKey]) { delete callbacks[callbackKey]; } }else{ alert(message); } },storageCallback:function(action,callback,isEscape,isBase64){ var callbackKey = action+callbackId; if (callback) { callbackDefine[callbackKey] = {callback:callback,isEscape:isEscape,isBase64:isBase64}; } },execCallback:function(callbackKey, data){ globalErrorKey = callbackKey; var callbackItem = callbackDefine[callbackKey]; if (callbackItem) { data = data=="null"?null:data; if(data){ if(callbackItem.isEscape==true){ data = unescape(data); }else if(callbackItem.isBase64==true){ data = Base64.decode64(data); } } if (callbackItem.callback) { if(typeof callbackItem.callback==="function"){ var func = callbackItem.callback; func(data); }else{ _eval(callbackItem.callback+"('"+data+"','"+callbackKey+"')"); } } if (callbackItem) { delete callbackDefine[callbackKey]; } } globalErrorKey = null; } }; })(); WadeMobile.event = (function(){ if(WadeMobile.isApp()){ var e = document.createEvent('Events'); return { back:function(){ e.initEvent('backKeyDown'); document.dispatchEvent(e); },menu:function(){ e.initEvent('menuKeyDown'); document.dispatchEvent(e); },search:function(){ e.initEvent('searchKeyDown'); document.dispatchEvent(e); } }; } })(); /************公共方法**************/ /** * @param {String} errorMessage 错误信息 * @param {String} scriptURI 错误文件 * @param {Long} lineNumber 错误行号 */ window.onerror = function(errorMessage, scriptURI, lineNumber) { var msgArray = new Array(); if (errorMessage) msgArray.push("错误信息:" + errorMessage); if (lineNumber) msgArray.push("错误行号:" + lineNumber); if (globalErrorKey) msgArray.push("错误关键字:" + globalErrorKey); if (scriptURI) msgArray.push("错误文件:" + scriptURI); var msg = msgArray.join("\t\n"); console.log(msg); alert(msg); }; //动态执行js方法 function _eval(code,action){ if(WadeMobile.debug){ alert(code); } var func = eval(code); if(typeof func==="function"){ func(); } } //格式转换方法 function stringify(args) { if (typeof JSON == "undefined") { var s = "["; for (var i=0; i<args.length; i++) { if (i > 0) { s = s + ","; } var type = typeof args[i]; if ((type == "number") || (type == "boolean")) { s = s + args[i]; } else if (args[i] instanceof Array) { s = s + "[" + args[i] + "]"; } else if (args[i] instanceof Object) { var start = true; s = s + '{'; for (var name in args[i]) { if (args[i][name] != null) { if (!start) { s = s + ','; } s = s + '"' + name + '":'; var nameType = typeof args[i][name]; if ((nameType == "number") || (nameType == "boolean")) { s = s + args[i][name]; } else if ((typeof args[i][name]) == 'function') { // don't copy the functions s = s + '""'; } else if (args[i][name] instanceof Object) { s = s + stringify(args[i][name]); } else { s = s + '"' + args[i][name] + '"'; } start=false; } } s = s + '}'; }else { var a = args[i].replace(/\\/g, '\\\\'); a = a.replace(/"/g, '\\"'); s = s + '"' + a + '"'; } } s = s + "]"; return s; }else { return JSON.stringify(args); } }; /*从终端中获取类型*/ WadeMobile.getTerminalType(function(type){ console.log("读取真机类型:"+type); if(type){ terminalType = type; } }); var ExpandMobile = require("res/js/mobile/expand-mobile.js"); var BizMobile = require("biz/js/common/biz-mobile.js"); Wade.extend(WadeMobile,ExpandMobile);//属性合并,ExpandMobile累加到WadeMobile中 Wade.extend(WadeMobile,BizMobile);//属性合并,BizMobile累加到WadeMobile中 return WadeMobile; });