num lines-num-new"> 74
execute("openWindow", [pageAction,param],err);
},closeWindow:function(result,state,err){
execute("closeWindow", [result,state],err);
},openSlidingMenu:function(callback,action,param,width,height,leftMargin,topMargin,err){
WadeMobile.callback.storageCallback("openSlidingMenu",callback);
execute("openSlidingMenu", [action,param,width,height,leftMargin,topMargin],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 isAlert = true;//防止反复弹出alert
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{
if(isAlert){
isAlert = false
alert(action+"无终端类型");
}else{
console.log(action+"无终端类型");
}
}
};
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="+encodeURIComponent(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).contentWindow.location = encodeURIComponent(url);
//document.getElementById(ifrmName).src = encodeURI(url);//无法处理&符号
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, isEncode) {
if(typeof message == "undefined"){
return;
}
if(isEncode){
message = decodeURIComponent(message);
}
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){
var callbackKey = action+callbackId;
if (callback) {
callbackDefine[callbackKey] = {callback:callback};
}
},execCallback:function(callbackKey, data, isEncode){
globalErrorKey = callbackKey;
var callbackItem = callbackDefine[callbackKey];
if (callbackItem) {
data = data=="null"?null:data;
if(data){
if(isEncode){
data = decodeURIComponent(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);
}
};
return WadeMobile;
})();