JSBridge.js
3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
var u = navigator.userAgent;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
var appClient = null;
function AppClient(appObj, isAndroid) {
this.appObj = appObj;
this.isAndroid = isAndroid;
};
function isJson(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
// console.log(obj.latitude)
function toJson(str) {
try {
if(str.length > 2){
var result = /\{([\s\S]*)\}/.exec(str);
}
debugger
var arr = result[1].split(',')
var obj = {}
arr.forEach(function (value) {
var key, val
if(isAndroid){
key = value.split('=')[0]
val = value.split('=')[1]
} else {
key = value.split(':')[0]
val = value.split(':')[1]
}
obj[key] = val
})
return obj
} catch (e) {
return {}
}
}
// layer.open({
// content: "isAndroid:"+ isAndroid+ ",isiOS:" + isiOS,
// time: 2
// })
AppClient.prototype.getERCode = function (jsonStr, callback) {
var dataParams = "";
if(isJson(jsonStr)){
dataParams = JSON.parse(jsonStr);
}
var param = {
from: 'H5',
params: dataParams
};
if(this.isAndroid) {
window.WebViewJavascriptBridge.callHandler('getERCode', jsonStr);
window.WebViewJavascriptBridge.registerHandler('postERCode', callback);
} else {
this.appObj.registerHandler("postERCOde", callback)
this.appObj.callHandler("getERCode", param, function (data, responseCallback) {
});
}
};
AppClient.prototype.getGPS = function (jsonStr, callback) {
var dataParams = "";
if(isJson(jsonStr)) {
dataParams = JSON.parse(jsonStr);
}
var param = {
from: 'H5',
params: dataParams
};
if(this.isAndroid) {
window.WebViewJavascriptBridge.callHandler('getGPS', jsonStr, callback);
} else {
this.appObj.registerHandler("postGPS", callback)
this.appObj.callHandler("getGPS", param, function (data, responseCallback) {
});
}
};
if(isAndroid || isiOS) {
function setupWebViewJavascriptBridge(callback) {
if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
if(isiOS){
if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
window.WVJBCallbacks = [callback];
var WVJBIframe = document.createElement('iframe');
WVJBIframe.style.display = 'none';
WVJBIframe.src = 'https://__bridge_loaded__';
document.documentElement.appendChild(WVJBIframe);
setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
} else if (isAndroid) {
document.addEventListener('WebViewJavascriptBridgeReady', function (event) {
callback(WebViewJavascriptBridge)
}, false)
}
}
setupWebViewJavascriptBridge(function(bridge) {
if(isAndroid) {
appClient = new AppClient(window.WebViewJavascriptBridge, true);
bridge.init(function (message, responseCallback) {
responseCallback({'Javascript Responds': 'Wee!'})
})
}
if(isiOS) {
appClient = new AppClient(bridge, false);
}
// 此处可以调用一些init的方法
});
} else {
appClient = undefined;
}