Преглед на файлове

jsAPI 新增headers头字段参数

leijie преди 6 години
родител
ревизия
06850e474a

+ 36 - 32
display-server/src/main/webapp/biz/js/more/scene/DataRequest.js

@ -1,33 +1,37 @@
1

2
require(["mobile","util"], function(Mobile) {
3
	
4
	// 测测你的人品按钮
5
	$("#testCharacter").tap(function(){
6
		
7
		var param = new Wade.DataMap();
8
		param.put("data", $("#J_username").val());
9
		
10
		// 数据请求
11
		Mobile.dataRequest("SceneBean.dataRequestScene", param, function(result){
12
			// 获取返回的数据
13
			var obj = new Wade.DataMap(result);
14
			var retName = obj.get("retName");
15
			var retMsg = obj.get("retMsg");
16
			
17
			$("#retName").text(retName);
18
			$("#retMsg").text(retMsg);
19
			$("#mainTestCharacterContent").hide();
20
			$("#retTestCharacterContent").show();
21
		});
22
	});
23
	
24
	// 再测一次按钮
25
	$("#testCharacterAgain").tap(function(){
26
		$("#retName").text("");
27
		$("#retMsg").text("");
28
		$("#J_username").val("");
29
		$("#retTestCharacterContent").hide();
30
		$("#mainTestCharacterContent").show();
31
	});
32
	
1
2
require(["mobile","util"], function(Mobile) {
3
	
4
	// 测测你的人品按钮
5
	$("#testCharacter").tap(function(){
6
		
7
		var param = new Wade.DataMap();
8
		param.put("data", $("#J_username").val());
9
		
10
		var headers = new Wade.DataMap();
11
		headers.put("Accept-Charset","utf-8");
12
		headers.put("Date","09 Step 2018 11:01:31 GMT");
13
		
14
		// 数据请求
15
		Mobile.dataRequest("SceneBean.dataRequestScene", param, function(result){
16
			// 获取返回的数据
17
			var obj = new Wade.DataMap(result);
18
			var retName = obj.get("retName");
19
			var retMsg = obj.get("retMsg");
20
			
21
			$("#retName").text(retName);
22
			$("#retMsg").text(retMsg);
23
			$("#mainTestCharacterContent").hide();
24
			$("#retTestCharacterContent").show();
25
		},null,headers);
26
	});
27
	
28
	// 再测一次按钮
29
	$("#testCharacterAgain").tap(function(){
30
		$("#retName").text("");
31
		$("#retMsg").text("");
32
		$("#J_username").val("");
33
		$("#retTestCharacterContent").hide();
34
		$("#mainTestCharacterContent").show();
35
	});
36
	
33 37
});

+ 224 - 222
display-server/src/main/webapp/res/js/mobile/mobile-client.js

@ -1,222 +1,224 @@
1
/**
2
 * 此JS文件匹配mobile_browser.js,用于分离出终端调用和web调用的逻辑.
3
 * 终端访问应用时,动态引用mobile_client.js文件;浏览器访问应用时,动态引用mobile_browser.js文件.
4
 */
5
define(["wadeMobile","clientTool"],function(WadeMobile,clientTool) {
6
	var Mobile = new function() {
7
		/******************系统功能**********************/
8
		/*判断是否App*/
9
		this.isApp = function(){
10
			return WadeMobile.isApp();
11
		};
12
		/*关闭应用*/
13
		this.closeApp = function() {
14
			WadeMobile.close(false);
15
		};
16
		/******************数据请求**********************/
17
		/*调用服务*/
18
		this.dataRequest = function(action, param, callback, err) {
19
			param = param ? param : "";
20
			WadeMobile.dataRequest(callback, action, param.toString(), null, null, null, err);
21
		};
22
		/*调用指定服务端地址服务*/
23
		this.dataRequestWithHost = function(url, action, param, callback, err) {
24
			param = param ? param : "";
25
			WadeMobile.dataRequestWithHost(callback, url, action, param.toString(), null, null, null, err);
26
		};
27
		/******************页面跳转**********************/
28
		/*页面跳转,url为跳转目标*/
29
		this.loadUrl = function(url, err) {
30
			WadeMobile.loadUrl(url, err);
31
		};
32
		/*新开一个activity,页面跳转,url为跳转目标*/
33
		this.openUrl = function(url, err) {
34
			WadeMobile.openUrl(url, err);
35
		};
36
		/*页面跳转,param为打开页面时调用接口的参数*/
37
		this.openPage = function(pageAction, param, err) {
38
			param = param ? param : "";
39
			WadeMobile.openPage(pageAction, param.toString(), err);
40
		};
41
		this.loadPage = function(pageAction, param, err){
42
			param = param ? param : "";
43
			WadeMobile.loadPage(pageAction, param.toString(), err);
44
		};
45
		/*页面跳转,param为打开页面的映射数据*/
46
		this.openTemplate = function(pageAction, param, err) {
47
			param = param ? param : "";
48
			WadeMobile.openTemplate(pageAction, param.toString(), err);
49
		};
50
		this.loadTemplate = function(pageAction, param, err){
51
			param = param ? param : "";
52
			WadeMobile.loadTemplate(pageAction, param.toString(), err);
53
		};
54
		/*将模板转换成html源码*/
55
		this.getTemplate = function(action,param,callback,err){
56
			param = param ? param : "";
57
			if(typeof(param) != "string"){
58
				param = param.toString();
59
			}
60
			WadeMobile.getTemplate(callback,action,param,err);
61
		};
62
		/*将Page转换成html源码*/
63
		this.getPage = function(action, param, callback, err){
64
			param = param ? param : "";
65
			if(typeof(param) != "string"){
66
				param = param.toString();
67
			}
68
			WadeMobile.getPage(callback,action,param,err);
69
		};
70
		/*回退到前一个界面*/
71
		this.back = function(tag,err){
72
			WadeMobile.back(tag,err);
73
		};
74
		/*带回调的回退*/
75
		this.backWithCallback = function(data,tag,err){
76
			WadeMobile.backWithCallback(data,tag,err);
77
		};
78
		/******************基础UI**********************/
79
		/*打开loading对话框*/
80
		this.loadingStart = function(message,title){
81
			WadeMobile.loadingStart(message,title);
82
		};
83
		/*关闭加载中对话框*/
84
		this.loadingStop = function(){
85
			WadeMobile.loadingStop();
86
		};
87
		/*弹出确认对话框*/
88
		this.confirm = function(){
89
			alert("confirm待开发……");
90
		};
91
		/*弹出提示气泡*/
92
		this.tip = function(msg,type){
93
			if(type==undefined){
94
				type = 1;
95
			}
96
			WadeMobile.tip(msg, type);
97
		};
98
		/*弹出提示框*/
99
		this.alert = function(msg, title, callback) {
100
			WadeMobile.alert(msg, title, callback);
101
		};
102
		/******************内存缓存**********************/
103
		this.setMemoryCache = function(key, value){
104
			if (clientTool.tool.isDataMap(key)) {
105
				WadeMobile.setMemoryCache(key.map);
106
			} else {
107
				WadeMobile.setMemoryCache(key, value);
108
			}
109
		};
110
		this.getMemoryCache = function(callback,key,defValue){
111
			WadeMobile.getMemoryCache(callback,key,defValue);
112
		};
113
		this.removeMemoryCache = function(key){
114
			WadeMobile.removeMemoryCache(key);
115
		};
116
		this.clearMemoryCache = function(){
117
			WadeMobile.clearMemoryCache();
118
		};
119
		/******************离线缓存**********************/
120
		this.setOfflineCache = function(key, value){
121
			if (clientTool.tool.isDataMap(key)) {
122
				WadeMobile.setOfflineCache(key.map);
123
			} else {
124
				WadeMobile.setOfflineCache(key, value);
125
			}
126
		};
127
		this.getOfflineCache = function(callback, key, value){
128
			WadeMobile.getOfflineCache(callback, key, value);
129
		};
130
		this.removeOfflineCache = function(key){
131
			WadeMobile.removeOfflineCache(key);
132
		};
133
		this.clearOfflineCache = function(){
134
			WadeMobile.clearOfflineCache();
135
		};
136
		/******************扩展UI**********************/
137
		this.openDialog = function(pageAction,param,callback,width,height){
138
			param = param ? param : "";
139
			width = width ? width : 0.5;//默认0.5
140
			height = height ? height : 0.5;
141
			WadeMobile.openDialog(callback,pageAction,param.toString(),width,height);
142
		};
143
		this.closeDialog = function(result){
144
			WadeMobile.closeDialog(result);
145
		};
146
		this.openWindow = function(pageAction,param,callback){
147
			param = param ? param : "";
148
			WadeMobile.openWindow(callback,pageAction,param.toString());
149
		};
150
		this.closeWindow = function(result){
151
			if(typeof(result) == "undefined" || result == null){
152
				WadeMobile.closeWindow();
153
				return;
154
			}
155
			if(typeof(result) != "string"){
156
				result = result.toString();
157
			}
158
			WadeMobile.closeWindow(result);
159
		};
160
		/*打开侧滑菜单*/
161
		this.openSlidingMenu = function(action,param,callback,type){//type:left|right
162
			type = type?type:"left";
163
			param = param ? param : "";
164
			if(type=="left"){
165
				WadeMobile.openSlidingMenu(callback,action,param,0.5,1,0,0);
166
			}else{
167
				WadeMobile.openSlidingMenu(callback,action,param,0.5,1,1,0);
168
			}
169
		}
170
		/*关闭侧滑菜单*/
171
		this.closeSlidingMenu = function(result){
172
			WadeMobile.closeSlidingMenu(result);
173
		}
174
		/******************本地数据库操作**********************/
175
		this.execSQL = function(dbName,sql,bindArgs,limit,offset,callback,err){
176
			WadeMobile.execSQL(dbName,sql,bindArgs,limit,offset,callback,err);
177
		};
178
		this.insert = function(dbName,table,datas,callback,err){
179
			WadeMobile.insert(dbName,table,datas,callback,err);
180
		};
181
		this.delete = function(dbName,table,condSQL,conds,callback,err){
182
			WadeMobile.delete(dbName,table,condSQL,conds,callback,err);
183
		};
184
		this.update = function(dbName,table,datas,condSQL,conds,callback,err){
185
			WadeMobile.update(dbName,table,datas,condSQL,conds,callback,err);
186
		};
187
		this.select = function(dbName,table,columns,condSQL,conds,limit,offset,callback,err){
188
			WadeMobile.select(dbName,table,columns,condSQL,conds,limit,offset,callback,err);
189
		};
190
		//查询第一行数据,效率高
191
		this.selectFirst = function(dbName,table,columns,condSQL,conds,callback,err){
192
			WadeMobile.selectFirst(dbName,table,columns,condSQL,conds,callback,err);
193
		};
194
		// 设置手势锁
195
		this.setScreenLock = function(dataParam,callback,err) {
196
			WadeMobile.setScreenLock(dataParam.toString(),callback,err);
197
		}
198
		// 获取手势锁状态
199
		this.getScreenLockState = function(callback) {
200
			WadeMobile.getScreenLockState(callback);
201
		}
202
		// 解锁
203
		this.screenUnlock = function(forgetPageAction,callback,err){
204
			WadeMobile.screenUnlock(forgetPageAction,callback,err);
205
		}
206
		// 打开小键盘
207
		this.openKeyboard = function(value,err){
208
			WadeMobile.openKeyboard(value,err);
209
		}
210
		this.openNative = function(data,err){
211
			WadeMobile.openNative(data.toString(),err);
212
		}
213
		// 初始化NFC
214
		this.initNfc = function(data,err){
215
			WadeMobile.initNfc(data.toString(),err);
216
		}
217
		
218
	};
219
	
220
	return Mobile;
221
});
222

1
/**
2
 * 此JS文件匹配mobile_browser.js,用于分离出终端调用和web调用的逻辑.
3
 * 终端访问应用时,动态引用mobile_client.js文件;浏览器访问应用时,动态引用mobile_browser.js文件.
4
 */
5
define(["wadeMobile","clientTool"],function(WadeMobile,clientTool) {
6
	var Mobile = new function() {
7
		/******************系统功能**********************/
8
		/*判断是否App*/
9
		this.isApp = function(){
10
			return WadeMobile.isApp();
11
		};
12
		/*关闭应用*/
13
		this.closeApp = function() {
14
			WadeMobile.close(false);
15
		};
16
		/******************数据请求**********************/
17
		/*调用服务*/
18
		this.dataRequest = function(action, param, callback, err, headers) {
19
			param = param ? param : "";
20
			headers = headers ? headers : "";
21
			WadeMobile.dataRequest(callback, action, param.toString(), null, null, null, err,headers.toString());
22
		};
23
		/*调用指定服务端地址服务*/
24
		this.dataRequestWithHost = function(url, action, param, callback, err, headers) {
25
			param = param ? param : "";
26
			headers = headers ? headers : "";
27
			WadeMobile.dataRequestWithHost(callback, url, action, param.toString(), null, null, null, err,headers.toString());
28
		};
29
		/******************页面跳转**********************/
30
		/*页面跳转,url为跳转目标*/
31
		this.loadUrl = function(url, err) {
32
			WadeMobile.loadUrl(url, err);
33
		};
34
		/*新开一个activity,页面跳转,url为跳转目标*/
35
		this.openUrl = function(url, err) {
36
			WadeMobile.openUrl(url, err);
37
		};
38
		/*页面跳转,param为打开页面时调用接口的参数*/
39
		this.openPage = function(pageAction, param, err) {
40
			param = param ? param : "";
41
			WadeMobile.openPage(pageAction, param.toString(), err);
42
		};
43
		this.loadPage = function(pageAction, param, err){
44
			param = param ? param : "";
45
			WadeMobile.loadPage(pageAction, param.toString(), err);
46
		};
47
		/*页面跳转,param为打开页面的映射数据*/
48
		this.openTemplate = function(pageAction, param, err) {
49
			param = param ? param : "";
50
			WadeMobile.openTemplate(pageAction, param.toString(), err);
51
		};
52
		this.loadTemplate = function(pageAction, param, err){
53
			param = param ? param : "";
54
			WadeMobile.loadTemplate(pageAction, param.toString(), err);
55
		};
56
		/*将模板转换成html源码*/
57
		this.getTemplate = function(action,param,callback,err){
58
			param = param ? param : "";
59
			if(typeof(param) != "string"){
60
				param = param.toString();
61
			}
62
			WadeMobile.getTemplate(callback,action,param,err);
63
		};
64
		/*将Page转换成html源码*/
65
		this.getPage = function(action, param, callback, err){
66
			param = param ? param : "";
67
			if(typeof(param) != "string"){
68
				param = param.toString();
69
			}
70
			WadeMobile.getPage(callback,action,param,err);
71
		};
72
		/*回退到前一个界面*/
73
		this.back = function(tag,err){
74
			WadeMobile.back(tag,err);
75
		};
76
		/*带回调的回退*/
77
		this.backWithCallback = function(data,tag,err){
78
			WadeMobile.backWithCallback(data,tag,err);
79
		};
80
		/******************基础UI**********************/
81
		/*打开loading对话框*/
82
		this.loadingStart = function(message,title){
83
			WadeMobile.loadingStart(message,title);
84
		};
85
		/*关闭加载中对话框*/
86
		this.loadingStop = function(){
87
			WadeMobile.loadingStop();
88
		};
89
		/*弹出确认对话框*/
90
		this.confirm = function(){
91
			alert("confirm待开发……");
92
		};
93
		/*弹出提示气泡*/
94
		this.tip = function(msg,type){
95
			if(type==undefined){
96
				type = 1;
97
			}
98
			WadeMobile.tip(msg, type);
99
		};
100
		/*弹出提示框*/
101
		this.alert = function(msg, title, callback) {
102
			WadeMobile.alert(msg, title, callback);
103
		};
104
		/******************内存缓存**********************/
105
		this.setMemoryCache = function(key, value){
106
			if (clientTool.tool.isDataMap(key)) {
107
				WadeMobile.setMemoryCache(key.map);
108
			} else {
109
				WadeMobile.setMemoryCache(key, value);
110
			}
111
		};
112
		this.getMemoryCache = function(callback,key,defValue){
113
			WadeMobile.getMemoryCache(callback,key,defValue);
114
		};
115
		this.removeMemoryCache = function(key){
116
			WadeMobile.removeMemoryCache(key);
117
		};
118
		this.clearMemoryCache = function(){
119
			WadeMobile.clearMemoryCache();
120
		};
121
		/******************离线缓存**********************/
122
		this.setOfflineCache = function(key, value){
123
			if (clientTool.tool.isDataMap(key)) {
124
				WadeMobile.setOfflineCache(key.map);
125
			} else {
126
				WadeMobile.setOfflineCache(key, value);
127
			}
128
		};
129
		this.getOfflineCache = function(callback, key, value){
130
			WadeMobile.getOfflineCache(callback, key, value);
131
		};
132
		this.removeOfflineCache = function(key){
133
			WadeMobile.removeOfflineCache(key);
134
		};
135
		this.clearOfflineCache = function(){
136
			WadeMobile.clearOfflineCache();
137
		};
138
		/******************扩展UI**********************/
139
		this.openDialog = function(pageAction,param,callback,width,height){
140
			param = param ? param : "";
141
			width = width ? width : 0.5;//默认0.5
142
			height = height ? height : 0.5;
143
			WadeMobile.openDialog(callback,pageAction,param.toString(),width,height);
144
		};
145
		this.closeDialog = function(result){
146
			WadeMobile.closeDialog(result);
147
		};
148
		this.openWindow = function(pageAction,param,callback){
149
			param = param ? param : "";
150
			WadeMobile.openWindow(callback,pageAction,param.toString());
151
		};
152
		this.closeWindow = function(result){
153
			if(typeof(result) == "undefined" || result == null){
154
				WadeMobile.closeWindow();
155
				return;
156
			}
157
			if(typeof(result) != "string"){
158
				result = result.toString();
159
			}
160
			WadeMobile.closeWindow(result);
161
		};
162
		/*打开侧滑菜单*/
163
		this.openSlidingMenu = function(action,param,callback,type){//type:left|right
164
			type = type?type:"left";
165
			param = param ? param : "";
166
			if(type=="left"){
167
				WadeMobile.openSlidingMenu(callback,action,param,0.5,1,0,0);
168
			}else{
169
				WadeMobile.openSlidingMenu(callback,action,param,0.5,1,1,0);
170
			}
171
		}
172
		/*关闭侧滑菜单*/
173
		this.closeSlidingMenu = function(result){
174
			WadeMobile.closeSlidingMenu(result);
175
		}
176
		/******************本地数据库操作**********************/
177
		this.execSQL = function(dbName,sql,bindArgs,limit,offset,callback,err){
178
			WadeMobile.execSQL(dbName,sql,bindArgs,limit,offset,callback,err);
179
		};
180
		this.insert = function(dbName,table,datas,callback,err){
181
			WadeMobile.insert(dbName,table,datas,callback,err);
182
		};
183
		this.delete = function(dbName,table,condSQL,conds,callback,err){
184
			WadeMobile.delete(dbName,table,condSQL,conds,callback,err);
185
		};
186
		this.update = function(dbName,table,datas,condSQL,conds,callback,err){
187
			WadeMobile.update(dbName,table,datas,condSQL,conds,callback,err);
188
		};
189
		this.select = function(dbName,table,columns,condSQL,conds,limit,offset,callback,err){
190
			WadeMobile.select(dbName,table,columns,condSQL,conds,limit,offset,callback,err);
191
		};
192
		//查询第一行数据,效率高
193
		this.selectFirst = function(dbName,table,columns,condSQL,conds,callback,err){
194
			WadeMobile.selectFirst(dbName,table,columns,condSQL,conds,callback,err);
195
		};
196
		// 设置手势锁
197
		this.setScreenLock = function(dataParam,callback,err) {
198
			WadeMobile.setScreenLock(dataParam.toString(),callback,err);
199
		}
200
		// 获取手势锁状态
201
		this.getScreenLockState = function(callback) {
202
			WadeMobile.getScreenLockState(callback);
203
		}
204
		// 解锁
205
		this.screenUnlock = function(forgetPageAction,callback,err){
206
			WadeMobile.screenUnlock(forgetPageAction,callback,err);
207
		}
208
		// 打开小键盘
209
		this.openKeyboard = function(value,err){
210
			WadeMobile.openKeyboard(value,err);
211
		}
212
		this.openNative = function(data,err){
213
			WadeMobile.openNative(data.toString(),err);
214
		}
215
		// 初始化NFC
216
		this.initNfc = function(data,err){
217
			WadeMobile.initNfc(data.toString(),err);
218
		}
219
		
220
	};
221
	
222
	return Mobile;
223
});
224

+ 507 - 507
display-server/src/main/webapp/res/js/mobile/wade-mobile.js

@ -1,508 +1,508 @@
1
/**
2

3
 * 与客户端交互的基础API
4
 */
5
define(["jcl","base64","res/js/mobile/expand-mobile.js","biz/js/common/biz-mobile.js"],function(Wade,Base64) {
6
	//终端类型,a为android,i为ios
7
	var deviceType = (function(){
8
		/*
9
		IpuMobile/i1/android/00/2.0/Hybrid
10
        userAgent格式
11
        i1版本规范:
12
        标识符/规范版本号/终端类型(ios,android,wp)/终端型号(平板,或尺寸,00表示默认)/框架版本号/结尾标识符
13
        */
14
		var sUserAgent = window.navigator.userAgent;
15
		//          标识符     规范1  类型2 型号3  框架4 结尾标识符
16
		var re = /IpuMobile\/(.*)\/(.*)\/(.*)\/(.*)\/Hybrid/ig
17
		var arrMessages = re.exec(sUserAgent);
18
		if(arrMessages && arrMessages[1] =="i1" ){
19
			if(arrMessages[2] == "android"){
20
				return "a";
21
			}else if(arrMessages[2] == "ios"){
22
				return "i"
23
			}else if(arrMessages[2] == "wp"){
24
				return "w";
25
			}else{
26
				return null;
27
			}
28
		}else{
29
			return null;
30
		}
31
	})();
32
	if(!window["TerminalType"]){
33
		window["TerminalType"] = deviceType;
34
	}
35
	var terminalType = window["TerminalType"];
36
	WadeMobile = (function(){
37
        return{
38
        	isAndroid:function(){
39
        		return terminalType=='a';
40
        	},isIOS:function(){
41
        		return terminalType=='i';
42
        	},isWP:function(){
43
        		return terminalType=='w';
44
        	},isApp:function(){//判断是否是APP应用
45
				return !!terminalType;
46
        	},getSysInfo:function(callback,key,err){//TELNUMBER|IMEI|IMSI|SDKVERSION|OSVERSION|PLATFORM|SIMNUMBER
47
				WadeMobile.callback.storageCallback("getSysInfo",callback);
48
				execute("getSysInfo", [key],err);
49
			},close:function(confirm,err){
50
				if(typeof(confirm)!="boolean"){
51
					confirm = true;
52
				}
53
				execute("close", [confirm],err);
54
			},httpRequest:function(callback,requestUrl,encode,conTimeout,readTimeout,err){
55
				if(terminalType=="i"){
56
					requestUrl = encodeURIComponent(requestUrl);
57
				}
58
				WadeMobile.callback.storageCallback("httpRequest",callback);
59
				execute("httpRequest", [requestUrl,encode,conTimeout,readTimeout],err);
60
			},dataRequest:function(callback,dataAction,param,encode,conTimeout,readTimeout,err){
61
				WadeMobile.callback.storageCallback("dataRequest",callback);
62
				execute("dataRequest", [dataAction,param,encode,conTimeout,readTimeout],err);
63
			},dataRequestWithHost:function(callback,url,dataAction,param,encode,conTimeout,readTimeout,err){
64
				WadeMobile.callback.storageCallback("dataRequestWithHost",callback);
65
				execute("dataRequestWithHost", [url,dataAction,param,encode,conTimeout,readTimeout],err);
66
			},loadUrl:function(url,err){
67
				execute("loadUrl", [encodeURIComponent(url)],err);
68
			},openUrl:function(url,err){
69
				execute("openUrl", [encodeURIComponent(url)],err);
70
			},openPage:function(action,data,err){
71
				execute("openPage", [action,data],err);
72
			},openTemplate:function(action,context,err){
73
				execute("openTemplate", [action,context],err);
74
			},loadPage:function(action,data,err){
75
				execute("loadPage", [action,data],err);
76
			},loadTemplate:function(action,context,err){
77
				execute("loadTemplate", [action,context],err);
78
			},openBrowser:function(url,err){
79
				execute("openBrowser",[url],err);
80
			},openIpuBrowser:function(url,hasTitle,err){
81
				execute("openIpuBrowser",[url,hasTitle],err);
82
			},back:function(tag,err){
83
				execute("back",[tag],err);
84
			},backWithCallback:function(data,tag,err){
85
				execute("backWithCallback",[data,tag],err);
86
			},getPage:function(callback,action,param,err){
87
				WadeMobile.callback.storageCallback("getPage",callback);
88
				execute("getPage", [action,param],err);
89
			},getTemplate:function(callback,action,context,err){
90
				WadeMobile.callback.storageCallback("getTemplate",callback);
91
				execute("getTemplate", [action,context],err);
92
			},storageDataByThread:function(dataAction,param,waitoutTime,err){
93
				execute("storageDataByThread", [dataAction,param,waitoutTime],err);
94
			},openDialog:function(callback,pageAction,param,width,height,err){
95
				WadeMobile.callback.storageCallback("openDialog",callback);
96
				execute("openDialog", [pageAction,param,width,height],err);
97
			},closeDialog:function(result,state,err){
98
				execute("closeDialog", [result,state],err);
99
			},openWindow:function(callback,pageAction,param,err){
100
				WadeMobile.callback.storageCallback("openWindow",callback);
101
				execute("openWindow", [pageAction,param],err);
102
			},closeWindow:function(result,state,err){
103
				execute("closeWindow", [result,state],err);
104
			},openSlidingMenu:function(callback,action,param,width,height,leftMargin,topMargin,err){
105
				WadeMobile.callback.storageCallback("openSlidingMenu",callback);
106
				execute("openSlidingMenu", [action,param,width,height,leftMargin,topMargin],err);
107
			},closeSlidingMenu:function(result,state,err){
108
				execute("closeSlidingMenu", [result,state],err);
109
			}
110
		};
111
	})();
112
	//自定义的按钮点击事件
113
		WadeMobile.customEvents =(function()
114
		{
115
			return {
116
				cancelEvent:function(){
117
	        		var param = Wade.DataMap();
118
					param.put("title","取消成功!");
119
					param.put("content","已经取消了!");
120
					param.put("alertType",1);
121
					param.put("cancelable",true);
122
					param.put("imageID",0);
123
					WadeMobile.sweetAlert(param);
124
	        	},confirmEvent:function(){
125
					var param = Wade.DataMap();
126
	        		param.put("title","确认成功!");
127
					param.put("content","成功完成了任务!");
128
					param.put("alertType",2);
129
					param.put("cancelable",true);
130
					param.put("imageID",0);
131
					WadeMobile.sweetAlert(param);
132
				},nextEvent:function(){
133
					var param = Wade.DataMap();
134
	        		param.put("title","加载成功!");
135
					param.put("content","");
136
					param.put("alertType",2);
137
					param.put("cancelable",true);
138
					param.put("imageID",0);
139
					WadeMobile.sweetAlert(param);
140
				}
141
			};
142
		})();
143
	//全局变量
144
	var callbackId = 0;
145
	var callbacks = {};//用来存放成功和失败的js回调函数
146
	var callbackDefine = {};//用来存放自定义的js回调函数
147
	var globalErrorKey = null;//全局错误关键字,定位错误
148
	
149
	/*绝大多数情况下,success回调函数是用不上的,有需要回调函数的时候异步方式传入取值*/
150
	var isAlert = true;//防止反复弹出alert
151
	var execute = function(action, args, error, success){
152
        args = stringify(args);
153
		if(terminalType=="a"){
154
			androidExecute(action, args, error, success);
155
		}else if(terminalType=="i"){
156
			iosExecute(action, args, error, success);
157
		}else if(terminalType=="w"){
158
			winphoneExecute(action, args, error, success);
159
		}else{
160
			if(isAlert){
161
				isAlert = false
162
				alert(action+"无终端类型");
163
			}else{
164
				console.log(action+"无终端类型");
165
			}
166
		}
167
	};
168
	
169
	WadeMobile.execute = execute;
170
	
171
	var androidExecute = function(action, args, error, success){
172
		//执行android方法时,带入到android底层的key值为,回调方法实际的key值 + 用于在top上索引本iframe的WadeMobile的唯一标识。
173
		//在android底层,如果发现回调函数的key值包含这个特殊的串。那么将解析这个key。并且取出加回调函数key的后半部分,作为在top上索引本iframe相对应的WadeMobile对象的唯一依据。
174
		var tmpKey = action+callbackId++;
175
		if(window._WadeMobileSet_Key_ != undefined){
176
			tmpKey += window._WadeMobileSet_Key_;
177
		}
178
        var callbackKey = globalErrorKey = tmpKey;
179
        if (success || error) {
180
    		callbacks[callbackKey] = {success:success, error:error};
181
        }
182
        if(WadeMobile.debug){
183
        	//alert("准备调用"+action+" 参数:"+args);
184
        	console.log("action:"+action+" param:"+args);
185
        }
186
        PluginManager.exec(action, callbackKey, args);
187
        globalErrorKey = null;
188
	};
189
 
190
    var iosExecute = function(action, args, error, success){
191
        var callbackKey = globalErrorKey = action+callbackId++;
192
        if (success || error) {
193
            callbacks[callbackKey] = {success:success, error:error};
194
        }
195
        if(WadeMobile.debug){
196
            //alert("准备调用"+action+" 参数:"+args);
197
            console.log("action:"+action+" param:"+args);
198
        }
199

200
        var WADE_SCHEME = "wade://";
201
        var url = WADE_SCHEME+action+"?param="+encodeURIComponent(args)+"&callback="+callbackKey;
202
        //一个动作请求客户端的最大数量,超过会造成请求覆盖
203
        var limitAction = 10;
204
        var ifrmName = "WADE_FRAME_"+(callbackId%limitAction);
205
        var ifrm = document.getElementById(ifrmName);
206
        if(!ifrm){
207
            var ifrm = document.createElement("iframe");
208
            ifrm.setAttribute("id",ifrmName);
209
            ifrm.setAttribute("width","0");
210
            ifrm.setAttribute("height","0");
211
            ifrm.setAttribute("border","0");
212
            ifrm.setAttribute("frameBorder","0");
213
            ifrm.setAttribute("name",ifrmName);
214
            document.body.appendChild(ifrm);
215
        }
216
        document.getElementById(ifrmName).contentWindow.location = encodeURIComponent(url);
217
        //document.getElementById(ifrmName).src = encodeURI(url);//无法处理&符号
218
        globalErrorKey = null;
219
	};
220
	
221
	var winphoneExecute = function(action, args, error, success){
222
        var callbackKey = globalErrorKey = action+callbackId++;
223
        if (success || error) {
224
    		callbacks[callbackKey] = {success:success, error:error};
225
        }
226
        if(WadeMobile.debug){
227
        	//alert("准备调用"+action+" 参数:"+args);
228
        	console.log("action:"+action+" param:"+args);
229
        }
230
      	window.external.Notify(stringify([action, callbackKey, args])); //[action, callbackKey, args]
231
      	globalErrorKey = null;
232
	};
233
	
234
	WadeMobile.callback = (function(){
235
		return{
236
			success:function(callbackKey, message) {
237
				if(typeof message == "undefined"){
238
					return;
239
				}
240
			    if (callbacks[callbackKey]) {
241
	                if (callbacks[callbackKey].success) {
242
	                	if(typeof callbacks[callbackKey].success==="function"){
243
	                		var func = callbacks[callbackKey].success;
244
	                		func(message);
245
	                	}else{
246
	                		_eval(callbacks[callbackKey].success+"('"+message+"','"+callbackKey+"')");
247
	                	}
248
	                }
249
			        if (callbacks[callbackKey]) {
250
			            delete callbacks[callbackKey];
251
			        }
252
			    }
253
			},error:function(callbackKey, message, isEncode) {
254
				if(typeof message == "undefined"){
255
					return;
256
				}
257
        		if(isEncode){
258
        			message = decodeURIComponent(message);
259
        		}
260
			    if (callbacks[callbackKey]) {
261
		            if (callbacks[callbackKey].error) {
262
		                if(typeof callbacks[callbackKey].error==="function"){
263
		                	var func = callbacks[callbackKey].error;
264
		                	func(message);
265
	                	}else{
266
	                		_eval(callbacks[callbackKey].error+"('"+message+"','"+callbackKey+"')");
267
	                	}
268
		            }
269
			        if (callbacks[callbackKey]) {
270
			            delete callbacks[callbackKey];
271
			        }
272
			    }else{
273
			    	alert(message);
274
			    }
275
			},storageCallback:function(action,callback){
276
				var callbackKey = action+callbackId;
277
				if (callback) {
278
		            callbackDefine[callbackKey] = {callback:callback};
279
		        }
280
			},execCallback:function(callbackKey, data, isEncode){
281
				globalErrorKey = callbackKey;
282
				var callbackItem = callbackDefine[callbackKey];
283
				if (callbackItem) {
284
					data = data=="null"?null:data;
285
					if(data){
286
		        		if(isEncode){
287
		        			data = decodeURIComponent(data);
288
		        		}
289
		        	}
290
		            if (callbackItem.callback) {   
291
		                if(typeof callbackItem.callback==="function"){
292
		                	var func = callbackItem.callback;
293
		                	func(data);
294
	                	}else{
295
	                		_eval(callbackItem.callback+"('"+data+"','"+callbackKey+"')");
296
	                	}
297
		            }
298
			        if (callbackItem) {
299
			            delete callbackDefine[callbackKey];
300
			        }
301
			    }
302
				globalErrorKey = null;
303
			}
304
		};
305
	})();
306
	
307
	/**物理按键监听start**/
308
	WadeMobile.setKeyListener = function(key, callback,isOverload){
309
		if(key=="back"||key=="menu"||key=="home"){
310
			document.addEventListener(key, callback, false);
311
			if(isOverload != null){
312
				execute("setKeyDownFlag", [key,isOverload]);
313
			}
314
		}
315
	}
316
	
317
	WadeMobile.cleanKeyDownFlag = function(key){
318
		if(key != null){
319
			execute("cleanKeyDownFlag", [key]);
320
		}
321
	}
322
	
323
	WadeMobile.event = (function(){
324
		if(WadeMobile.isApp()){
325
			// Create the event.
326
			var backEvent = document.createEvent('Event');
327
			var menuEvent = document.createEvent('Event');
328
			var homeEvent = document.createEvent('Event');
329
			return {
330
				back:function(){
331
					backEvent.initEvent("back", true, true);
332
					document.dispatchEvent(backEvent);
333
				},menu:function(){
334
					menuEvent.initEvent("menu", true, true);
335
				    document.dispatchEvent(menuEvent);
336
				},home:function(){
337
					homeEvent.initEvent("home", true, true);
338
				    document.dispatchEvent(homeEvent);
339
				}
340
			};
341
		}
342
	})();
343
	/**物理按键监听end**/
344
	
345
	/**back回调事件监听开始**/
346
	WadeMobile.backevent = (function(){
347
		if(WadeMobile.isApp()){
348
			return {
349
				backCall:function(data){
350
					var backCallEvent = document.createEvent('Event');
351
					backCallEvent.initEvent("backCall",true,true);
352
					backCallEvent.data = data;
353
					document.dispatchEvent(backCallEvent);
354
				}
355
			};
356
		}
357
	})();
358
	
359
	WadeMobile.setBackCallListener = function(callback){
360
		document.addEventListener("backCall", callback);
361
	}
362
	/**back回调事件监听结束**/
363
	
364
	/************公共方法**************/
365
	/**
366
	 * @param {String}  errorMessage   错误信息
367
	 * @param {String}  scriptURI      错误文件
368
	 * @param {Long}    lineNumber     错误行号
369
	 */
370
	window.onerror = function(errorMessage, scriptURI, lineNumber) {
371
		var msgArray = new Array();
372
		if (errorMessage)
373
			msgArray.push("错误信息:" + errorMessage);
374
		if (lineNumber)
375
			msgArray.push("错误行号:" + lineNumber);
376
		if (globalErrorKey)
377
			msgArray.push("错误关键字:" + globalErrorKey);
378
		if (scriptURI)
379
			msgArray.push("错误文件:" + scriptURI);
380
		var msg = msgArray.join("\t\n");
381
		console.log(msg);
382
		alert(msg);
383
	};
384
    /**
385
     * 重写alert方法,解决在iOS7以上不可点击问题
386
     * @param name
387
     */
388
	/**/
389
    window.alert = function(name){
390
    	
391
        var iframe = document.createElement("IFRAME");
392
        iframe.style.display="none";
393
        iframe.setAttribute("src", 'data:text/plain,');
394
        document.documentElement.appendChild(iframe);
395
        window.frames[window.frames.length-1].window.alert(name);
396
        iframe.parentNode.removeChild(iframe);
397
    }
398
    
399
	
400
	//动态执行js方法
401
	function _eval(code,action){
402
		if(WadeMobile.debug){
403
			alert(code);
404
		}
405
		var func = eval(code);
406
		if(typeof func==="function"){
407
			func();
408
		}
409
	}
410
	//格式转换方法
411
	function stringify(args) {
412
	    if (typeof JSON == "undefined") {
413
	        var s = "[";
414
	        for (var i=0; i<args.length; i++) {
415
	            if (i > 0) {
416
	                s = s + ",";
417
	            }
418
	            var type = typeof args[i];
419
	            if ((type == "number") || (type == "boolean")) {
420
	                s = s + args[i];
421
	            }
422
	            else if (args[i] instanceof Array) {
423
	            	s = s + "[" + args[i] + "]";
424
	            }
425
	            else if (args[i] instanceof Object) {
426
	            	var start = true;
427
	            	s = s + '{';
428
	            	for (var name in args[i]) {
429
	            		if (args[i][name] != null) {
430
		            		if (!start) {
431
		            			s = s + ',';
432
		            		}
433
		            		s = s + '"' + name + '":';
434
		            		var nameType = typeof args[i][name];
435
		            		if ((nameType == "number") || (nameType == "boolean")) {
436
		            			s = s + args[i][name];
437
		            		}
438
		            		else if ((typeof args[i][name]) == 'function') {
439
			           			// don't copy the functions
440
		            			s = s + '""'; 
441
		            		}
442
		            		else if (args[i][name] instanceof Object) {
443
		            			s = s + stringify(args[i][name]);
444
		            		}
445
		            		else {
446
		                        s = s + '"' + args[i][name] + '"';            			
447
		            		}
448
		                    start=false;
449
		                 }
450
	            	} 
451
	            	s = s + '}';
452
	            }else {
453
	                var a = args[i].replace(/\\/g, '\\\\');
454
	                a = a.replace(/"/g, '\\"');
455
	                s = s + '"' + a + '"';
456
	            }
457
	        }
458
	        s = s + "]";
459
	        return s;
460
	    }else {
461
	        return JSON.stringify(args);
462
	    }
463
	};
464
	
465
	var ExpandMobile = require("res/js/mobile/expand-mobile.js");
466
	var BizMobile = require("biz/js/common/biz-mobile.js");
467
	Wade.extend(WadeMobile,ExpandMobile);//属性合并,ExpandMobile累加到WadeMobile中
468
	Wade.extend(WadeMobile,BizMobile);//属性合并,BizMobile累加到WadeMobile中
469
	return WadeMobile;
470
});
471

472
//让top对象上,保持有一个当前iframe里面的WadeMobile对象的引用。
473
//注意:在iframe中,_WadeMobileSet_Key_+时间戳表示一个key,此key作为了在top对象上索引iframe中的WadeMobile的依据。
474
//将保持引用的key值存入到当前ifame的window对象上。
475
(function(){
476
	//屏蔽所有浏览器
477
	if( window.navigator.userAgent.indexOf("IpuMobile\/") == -1 ) {
478
		console.log("<WadeMobileSet> \"IpuMobile\/\" string does not exist in the userAgent. return.");
479
		return;
480
	}
481
	
482
	if(top != window){
483
		if(top.WadeMobileSet == undefined){
484
			top.WadeMobileSet = {};
485
		}
486
		for(var key in top.WadeMobileSet){
487
			try{
488
				if( key.indexOf("_WadeMobileSet_Key_") != -1 && ( !top.WadeMobileSet[key] || ( top.WadeMobileSet[key].canRemoved && top.WadeMobileSet[key].canRemoved() ) ) ){
489
					console.log("(top set)delete:" + key);
490
					delete top.WadeMobileSet[key];
491
					console.log("(top set)delete success :" + key);
492
				}
493
			}catch(e){
494
				console.log("a error(WadeMobile) : " + e);
495
				console.log("(top set)delete:" + key);
496
				delete top.WadeMobileSet[key];
497
				console.log("(top set)delete success :" + key);
498
			}
499
		}
500
		var key = "_WadeMobileSet_Key_" + new Date().getTime();
501
		window._WadeMobileSet_Key_ = key;
502
		console.log("in an iframe, window.WadeMobile object is referenced top.WadeMobileSet." + key);
503
		top.WadeMobileSet[key] = window.WadeMobile;
504
		window.WadeMobile.canRemoved = function(){
505
			return !window;
506
		};
507
	}
1
/**
2
3
 * 与客户端交互的基础API
4
 */
5
define(["jcl","base64","res/js/mobile/expand-mobile.js","biz/js/common/biz-mobile.js"],function(Wade,Base64) {
6
	//终端类型,a为android,i为ios
7
	var deviceType = (function(){
8
		/*
9
		IpuMobile/i1/android/00/2.0/Hybrid
10
        userAgent格式
11
        i1版本规范:
12
        标识符/规范版本号/终端类型(ios,android,wp)/终端型号(平板,或尺寸,00表示默认)/框架版本号/结尾标识符
13
        */
14
		var sUserAgent = window.navigator.userAgent;
15
		//          标识符     规范1  类型2 型号3  框架4 结尾标识符
16
		var re = /IpuMobile\/(.*)\/(.*)\/(.*)\/(.*)\/Hybrid/ig
17
		var arrMessages = re.exec(sUserAgent);
18
		if(arrMessages && arrMessages[1] =="i1" ){
19
			if(arrMessages[2] == "android"){
20
				return "a";
21
			}else if(arrMessages[2] == "ios"){
22
				return "i"
23
			}else if(arrMessages[2] == "wp"){
24
				return "w";
25
			}else{
26
				return null;
27
			}
28
		}else{
29
			return null;
30
		}
31
	})();
32
	if(!window["TerminalType"]){
33
		window["TerminalType"] = deviceType;
34
	}
35
	var terminalType = window["TerminalType"];
36
	WadeMobile = (function(){
37
        return{
38
        	isAndroid:function(){
39
        		return terminalType=='a';
40
        	},isIOS:function(){
41
        		return terminalType=='i';
42
        	},isWP:function(){
43
        		return terminalType=='w';
44
        	},isApp:function(){//判断是否是APP应用
45
				return !!terminalType;
46
        	},getSysInfo:function(callback,key,err){//TELNUMBER|IMEI|IMSI|SDKVERSION|OSVERSION|PLATFORM|SIMNUMBER
47
				WadeMobile.callback.storageCallback("getSysInfo",callback);
48
				execute("getSysInfo", [key],err);
49
			},close:function(confirm,err){
50
				if(typeof(confirm)!="boolean"){
51
					confirm = true;
52
				}
53
				execute("close", [confirm],err);
54
			},httpRequest:function(callback,requestUrl,encode,conTimeout,readTimeout,err){
55
				if(terminalType=="i"){
56
					requestUrl = encodeURIComponent(requestUrl);
57
				}
58
				WadeMobile.callback.storageCallback("httpRequest",callback);
59
				execute("httpRequest", [requestUrl,encode,conTimeout,readTimeout],err);
60
			},dataRequest:function(callback,dataAction,param,encode,conTimeout,readTimeout,err,headers){
61
				WadeMobile.callback.storageCallback("dataRequest",callback);
62
				execute("dataRequest", [dataAction,param,encode,conTimeout,readTimeout,headers],err);
63
			},dataRequestWithHost:function(callback,url,dataAction,param,encode,conTimeout,readTimeout,err,headers){
64
				WadeMobile.callback.storageCallback("dataRequestWithHost",callback);
65
				execute("dataRequestWithHost", [url,dataAction,param,encode,conTimeout,readTimeout,headers],err);
66
			},loadUrl:function(url,err){
67
				execute("loadUrl", [encodeURIComponent(url)],err);
68
			},openUrl:function(url,err){
69
				execute("openUrl", [encodeURIComponent(url)],err);
70
			},openPage:function(action,data,err){
71
				execute("openPage", [action,data],err);
72
			},openTemplate:function(action,context,err){
73
				execute("openTemplate", [action,context],err);
74
			},loadPage:function(action,data,err){
75
				execute("loadPage", [action,data],err);
76
			},loadTemplate:function(action,context,err){
77
				execute("loadTemplate", [action,context],err);
78
			},openBrowser:function(url,err){
79
				execute("openBrowser",[url],err);
80
			},openIpuBrowser:function(url,hasTitle,err){
81
				execute("openIpuBrowser",[url,hasTitle],err);
82
			},back:function(tag,err){
83
				execute("back",[tag],err);
84
			},backWithCallback:function(data,tag,err){
85
				execute("backWithCallback",[data,tag],err);
86
			},getPage:function(callback,action,param,err){
87
				WadeMobile.callback.storageCallback("getPage",callback);
88
				execute("getPage", [action,param],err);
89
			},getTemplate:function(callback,action,context,err){
90
				WadeMobile.callback.storageCallback("getTemplate",callback);
91
				execute("getTemplate", [action,context],err);
92
			},storageDataByThread:function(dataAction,param,waitoutTime,err){
93
				execute("storageDataByThread", [dataAction,param,waitoutTime],err);
94
			},openDialog:function(callback,pageAction,param,width,height,err){
95
				WadeMobile.callback.storageCallback("openDialog",callback);
96
				execute("openDialog", [pageAction,param,width,height],err);
97
			},closeDialog:function(result,state,err){
98
				execute("closeDialog", [result,state],err);
99
			},openWindow:function(callback,pageAction,param,err){
100
				WadeMobile.callback.storageCallback("openWindow",callback);
101
				execute("openWindow", [pageAction,param],err);
102
			},closeWindow:function(result,state,err){
103
				execute("closeWindow", [result,state],err);
104
			},openSlidingMenu:function(callback,action,param,width,height,leftMargin,topMargin,err){
105
				WadeMobile.callback.storageCallback("openSlidingMenu",callback);
106
				execute("openSlidingMenu", [action,param,width,height,leftMargin,topMargin],err);
107
			},closeSlidingMenu:function(result,state,err){
108
				execute("closeSlidingMenu", [result,state],err);
109
			}
110
		};
111
	})();
112
	//自定义的按钮点击事件
113
		WadeMobile.customEvents =(function()
114
		{
115
			return {
116
				cancelEvent:function(){
117
	        		var param = Wade.DataMap();
118
					param.put("title","取消成功!");
119
					param.put("content","已经取消了!");
120
					param.put("alertType",1);
121
					param.put("cancelable",true);
122
					param.put("imageID",0);
123
					WadeMobile.sweetAlert(param);
124
	        	},confirmEvent:function(){
125
					var param = Wade.DataMap();
126
	        		param.put("title","确认成功!");
127
					param.put("content","成功完成了任务!");
128
					param.put("alertType",2);
129
					param.put("cancelable",true);
130
					param.put("imageID",0);
131
					WadeMobile.sweetAlert(param);
132
				},nextEvent:function(){
133
					var param = Wade.DataMap();
134
	        		param.put("title","加载成功!");
135
					param.put("content","");
136
					param.put("alertType",2);
137
					param.put("cancelable",true);
138
					param.put("imageID",0);
139
					WadeMobile.sweetAlert(param);
140
				}
141
			};
142
		})();
143
	//全局变量
144
	var callbackId = 0;
145
	var callbacks = {};//用来存放成功和失败的js回调函数
146
	var callbackDefine = {};//用来存放自定义的js回调函数
147
	var globalErrorKey = null;//全局错误关键字,定位错误
148
	
149
	/*绝大多数情况下,success回调函数是用不上的,有需要回调函数的时候异步方式传入取值*/
150
	var isAlert = true;//防止反复弹出alert
151
	var execute = function(action, args, error, success){
152
        args = stringify(args);
153
		if(terminalType=="a"){
154
			androidExecute(action, args, error, success);
155
		}else if(terminalType=="i"){
156
			iosExecute(action, args, error, success);
157
		}else if(terminalType=="w"){
158
			winphoneExecute(action, args, error, success);
159
		}else{
160
			if(isAlert){
161
				isAlert = false
162
				alert(action+"无终端类型");
163
			}else{
164
				console.log(action+"无终端类型");
165
			}
166
		}
167
	};
168
	
169
	WadeMobile.execute = execute;
170
	
171
	var androidExecute = function(action, args, error, success){
172
		//执行android方法时,带入到android底层的key值为,回调方法实际的key值 + 用于在top上索引本iframe的WadeMobile的唯一标识。
173
		//在android底层,如果发现回调函数的key值包含这个特殊的串。那么将解析这个key。并且取出加回调函数key的后半部分,作为在top上索引本iframe相对应的WadeMobile对象的唯一依据。
174
		var tmpKey = action+callbackId++;
175
		if(window._WadeMobileSet_Key_ != undefined){
176
			tmpKey += window._WadeMobileSet_Key_;
177
		}
178
        var callbackKey = globalErrorKey = tmpKey;
179
        if (success || error) {
180
    		callbacks[callbackKey] = {success:success, error:error};
181
        }
182
        if(WadeMobile.debug){
183
        	//alert("准备调用"+action+" 参数:"+args);
184
        	console.log("action:"+action+" param:"+args);
185
        }
186
        PluginManager.exec(action, callbackKey, args);
187
        globalErrorKey = null;
188
	};
189
 
190
    var iosExecute = function(action, args, error, success){
191
        var callbackKey = globalErrorKey = action+callbackId++;
192
        if (success || error) {
193
            callbacks[callbackKey] = {success:success, error:error};
194
        }
195
        if(WadeMobile.debug){
196
            //alert("准备调用"+action+" 参数:"+args);
197
            console.log("action:"+action+" param:"+args);
198
        }
199
200
        var WADE_SCHEME = "wade://";
201
        var url = WADE_SCHEME+action+"?param="+encodeURIComponent(args)+"&callback="+callbackKey;
202
        //一个动作请求客户端的最大数量,超过会造成请求覆盖
203
        var limitAction = 10;
204
        var ifrmName = "WADE_FRAME_"+(callbackId%limitAction);
205
        var ifrm = document.getElementById(ifrmName);
206
        if(!ifrm){
207
            var ifrm = document.createElement("iframe");
208
            ifrm.setAttribute("id",ifrmName);
209
            ifrm.setAttribute("width","0");
210
            ifrm.setAttribute("height","0");
211
            ifrm.setAttribute("border","0");
212
            ifrm.setAttribute("frameBorder","0");
213
            ifrm.setAttribute("name",ifrmName);
214
            document.body.appendChild(ifrm);
215
        }
216
        document.getElementById(ifrmName).contentWindow.location = encodeURIComponent(url);
217
        //document.getElementById(ifrmName).src = encodeURI(url);//无法处理&符号
218
        globalErrorKey = null;
219
	};
220
	
221
	var winphoneExecute = function(action, args, error, success){
222
        var callbackKey = globalErrorKey = action+callbackId++;
223
        if (success || error) {
224
    		callbacks[callbackKey] = {success:success, error:error};
225
        }
226
        if(WadeMobile.debug){
227
        	//alert("准备调用"+action+" 参数:"+args);
228
        	console.log("action:"+action+" param:"+args);
229
        }
230
      	window.external.Notify(stringify([action, callbackKey, args])); //[action, callbackKey, args]
231
      	globalErrorKey = null;
232
	};
233
	
234
	WadeMobile.callback = (function(){
235
		return{
236
			success:function(callbackKey, message) {
237
				if(typeof message == "undefined"){
238
					return;
239
				}
240
			    if (callbacks[callbackKey]) {
241
	                if (callbacks[callbackKey].success) {
242
	                	if(typeof callbacks[callbackKey].success==="function"){
243
	                		var func = callbacks[callbackKey].success;
244
	                		func(message);
245
	                	}else{
246
	                		_eval(callbacks[callbackKey].success+"('"+message+"','"+callbackKey+"')");
247
	                	}
248
	                }
249
			        if (callbacks[callbackKey]) {
250
			            delete callbacks[callbackKey];
251
			        }
252
			    }
253
			},error:function(callbackKey, message, isEncode) {
254
				if(typeof message == "undefined"){
255
					return;
256
				}
257
        		if(isEncode){
258
        			message = decodeURIComponent(message);
259
        		}
260
			    if (callbacks[callbackKey]) {
261
		            if (callbacks[callbackKey].error) {
262
		                if(typeof callbacks[callbackKey].error==="function"){
263
		                	var func = callbacks[callbackKey].error;
264
		                	func(message);
265
	                	}else{
266
	                		_eval(callbacks[callbackKey].error+"('"+message+"','"+callbackKey+"')");
267
	                	}
268
		            }
269
			        if (callbacks[callbackKey]) {
270
			            delete callbacks[callbackKey];
271
			        }
272
			    }else{
273
			    	alert(message);
274
			    }
275
			},storageCallback:function(action,callback){
276
				var callbackKey = action+callbackId;
277
				if (callback) {
278
		            callbackDefine[callbackKey] = {callback:callback};
279
		        }
280
			},execCallback:function(callbackKey, data, isEncode){
281
				globalErrorKey = callbackKey;
282
				var callbackItem = callbackDefine[callbackKey];
283
				if (callbackItem) {
284
					data = data=="null"?null:data;
285
					if(data){
286
		        		if(isEncode){
287
		        			data = decodeURIComponent(data);
288
		        		}
289
		        	}
290
		            if (callbackItem.callback) {   
291
		                if(typeof callbackItem.callback==="function"){
292
		                	var func = callbackItem.callback;
293
		                	func(data);
294
	                	}else{
295
	                		_eval(callbackItem.callback+"('"+data+"','"+callbackKey+"')");
296
	                	}
297
		            }
298
			        if (callbackItem) {
299
			            delete callbackDefine[callbackKey];
300
			        }
301
			    }
302
				globalErrorKey = null;
303
			}
304
		};
305
	})();
306
	
307
	/**物理按键监听start**/
308
	WadeMobile.setKeyListener = function(key, callback,isOverload){
309
		if(key=="back"||key=="menu"||key=="home"){
310
			document.addEventListener(key, callback, false);
311
			if(isOverload != null){
312
				execute("setKeyDownFlag", [key,isOverload]);
313
			}
314
		}
315
	}
316
	
317
	WadeMobile.cleanKeyDownFlag = function(key){
318
		if(key != null){
319
			execute("cleanKeyDownFlag", [key]);
320
		}
321
	}
322
	
323
	WadeMobile.event = (function(){
324
		if(WadeMobile.isApp()){
325
			// Create the event.
326
			var backEvent = document.createEvent('Event');
327
			var menuEvent = document.createEvent('Event');
328
			var homeEvent = document.createEvent('Event');
329
			return {
330
				back:function(){
331
					backEvent.initEvent("back", true, true);
332
					document.dispatchEvent(backEvent);
333
				},menu:function(){
334
					menuEvent.initEvent("menu", true, true);
335
				    document.dispatchEvent(menuEvent);
336
				},home:function(){
337
					homeEvent.initEvent("home", true, true);
338
				    document.dispatchEvent(homeEvent);
339
				}
340
			};
341
		}
342
	})();
343
	/**物理按键监听end**/
344
	
345
	/**back回调事件监听开始**/
346
	WadeMobile.backevent = (function(){
347
		if(WadeMobile.isApp()){
348
			return {
349
				backCall:function(data){
350
					var backCallEvent = document.createEvent('Event');
351
					backCallEvent.initEvent("backCall",true,true);
352
					backCallEvent.data = data;
353
					document.dispatchEvent(backCallEvent);
354
				}
355
			};
356
		}
357
	})();
358
	
359
	WadeMobile.setBackCallListener = function(callback){
360
		document.addEventListener("backCall", callback);
361
	}
362
	/**back回调事件监听结束**/
363
	
364
	/************公共方法**************/
365
	/**
366
	 * @param {String}  errorMessage   错误信息
367
	 * @param {String}  scriptURI      错误文件
368
	 * @param {Long}    lineNumber     错误行号
369
	 */
370
	window.onerror = function(errorMessage, scriptURI, lineNumber) {
371
		var msgArray = new Array();
372
		if (errorMessage)
373
			msgArray.push("错误信息:" + errorMessage);
374
		if (lineNumber)
375
			msgArray.push("错误行号:" + lineNumber);
376
		if (globalErrorKey)
377
			msgArray.push("错误关键字:" + globalErrorKey);
378
		if (scriptURI)
379
			msgArray.push("错误文件:" + scriptURI);
380
		var msg = msgArray.join("\t\n");
381
		console.log(msg);
382
		alert(msg);
383
	};
384
    /**
385
     * 重写alert方法,解决在iOS7以上不可点击问题
386
     * @param name
387
     */
388
	/**/
389
    window.alert = function(name){
390
    	
391
        var iframe = document.createElement("IFRAME");
392
        iframe.style.display="none";
393
        iframe.setAttribute("src", 'data:text/plain,');
394
        document.documentElement.appendChild(iframe);
395
        window.frames[window.frames.length-1].window.alert(name);
396
        iframe.parentNode.removeChild(iframe);
397
    }
398
    
399
	
400
	//动态执行js方法
401
	function _eval(code,action){
402
		if(WadeMobile.debug){
403
			alert(code);
404
		}
405
		var func = eval(code);
406
		if(typeof func==="function"){
407
			func();
408
		}
409
	}
410
	//格式转换方法
411
	function stringify(args) {
412
	    if (typeof JSON == "undefined") {
413
	        var s = "[";
414
	        for (var i=0; i<args.length; i++) {
415
	            if (i > 0) {
416
	                s = s + ",";
417
	            }
418
	            var type = typeof args[i];
419
	            if ((type == "number") || (type == "boolean")) {
420
	                s = s + args[i];
421
	            }
422
	            else if (args[i] instanceof Array) {
423
	            	s = s + "[" + args[i] + "]";
424
	            }
425
	            else if (args[i] instanceof Object) {
426
	            	var start = true;
427
	            	s = s + '{';
428
	            	for (var name in args[i]) {
429
	            		if (args[i][name] != null) {
430
		            		if (!start) {
431
		            			s = s + ',';
432
		            		}
433
		            		s = s + '"' + name + '":';
434
		            		var nameType = typeof args[i][name];
435
		            		if ((nameType == "number") || (nameType == "boolean")) {
436
		            			s = s + args[i][name];
437
		            		}
438
		            		else if ((typeof args[i][name]) == 'function') {
439
			           			// don't copy the functions
440
		            			s = s + '""'; 
441
		            		}
442
		            		else if (args[i][name] instanceof Object) {
443
		            			s = s + stringify(args[i][name]);
444
		            		}
445
		            		else {
446
		                        s = s + '"' + args[i][name] + '"';            			
447
		            		}
448
		                    start=false;
449
		                 }
450
	            	} 
451
	            	s = s + '}';
452
	            }else {
453
	                var a = args[i].replace(/\\/g, '\\\\');
454
	                a = a.replace(/"/g, '\\"');
455
	                s = s + '"' + a + '"';
456
	            }
457
	        }
458
	        s = s + "]";
459
	        return s;
460
	    }else {
461
	        return JSON.stringify(args);
462
	    }
463
	};
464
	
465
	var ExpandMobile = require("res/js/mobile/expand-mobile.js");
466
	var BizMobile = require("biz/js/common/biz-mobile.js");
467
	Wade.extend(WadeMobile,ExpandMobile);//属性合并,ExpandMobile累加到WadeMobile中
468
	Wade.extend(WadeMobile,BizMobile);//属性合并,BizMobile累加到WadeMobile中
469
	return WadeMobile;
470
});
471
472
//让top对象上,保持有一个当前iframe里面的WadeMobile对象的引用。
473
//注意:在iframe中,_WadeMobileSet_Key_+时间戳表示一个key,此key作为了在top对象上索引iframe中的WadeMobile的依据。
474
//将保持引用的key值存入到当前ifame的window对象上。
475
(function(){
476
	//屏蔽所有浏览器
477
	if( window.navigator.userAgent.indexOf("IpuMobile\/") == -1 ) {
478
		console.log("<WadeMobileSet> \"IpuMobile\/\" string does not exist in the userAgent. return.");
479
		return;
480
	}
481
	
482
	if(top != window){
483
		if(top.WadeMobileSet == undefined){
484
			top.WadeMobileSet = {};
485
		}
486
		for(var key in top.WadeMobileSet){
487
			try{
488
				if( key.indexOf("_WadeMobileSet_Key_") != -1 && ( !top.WadeMobileSet[key] || ( top.WadeMobileSet[key].canRemoved && top.WadeMobileSet[key].canRemoved() ) ) ){
489
					console.log("(top set)delete:" + key);
490
					delete top.WadeMobileSet[key];
491
					console.log("(top set)delete success :" + key);
492
				}
493
			}catch(e){
494
				console.log("a error(WadeMobile) : " + e);
495
				console.log("(top set)delete:" + key);
496
				delete top.WadeMobileSet[key];
497
				console.log("(top set)delete success :" + key);
498
			}
499
		}
500
		var key = "_WadeMobileSet_Key_" + new Date().getTime();
501
		window._WadeMobileSet_Key_ = key;
502
		console.log("in an iframe, window.WadeMobile object is referenced top.WadeMobileSet." + key);
503
		top.WadeMobileSet[key] = window.WadeMobile;
504
		window.WadeMobile.canRemoved = function(){
505
			return !window;
506
		};
507
	}
508 508
})();