crh-jssdk 1.0.28 → 1.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -126,19 +126,29 @@ var JYBridge = /** @class */ (function () {
|
|
|
126
126
|
/**
|
|
127
127
|
* 初始化Bridge连接
|
|
128
128
|
* 使用ClientTHS初始化方式
|
|
129
|
+
* 注意:从第三方页面返回时 WebView 可能被重建,Bridge 尚未注入,需配合 iframe 触发重新注入
|
|
129
130
|
*/
|
|
130
131
|
JYBridge.prototype.init = function () {
|
|
131
132
|
var _this = this;
|
|
132
133
|
return new Promise(function (resolve) {
|
|
133
134
|
// 使用ClientTHS初始化(与ClientTemplate.js一致)
|
|
134
135
|
JYClientTHS.init();
|
|
136
|
+
var checkCount = 0;
|
|
137
|
+
// 最多等待30秒(300次 * 100ms),超时后不再等待
|
|
138
|
+
var maxChecks = 300;
|
|
135
139
|
// 等待WebViewJavascriptBridgeReady事件
|
|
136
140
|
var checkBridge = function () {
|
|
141
|
+
checkCount++;
|
|
137
142
|
if (window.WebViewJavascriptBridge) {
|
|
138
143
|
_this.bridge = window.WebViewJavascriptBridge;
|
|
139
144
|
console.log('JYBridge 初始化完成');
|
|
140
145
|
resolve();
|
|
141
146
|
}
|
|
147
|
+
else if (checkCount >= maxChecks) {
|
|
148
|
+
// 超时,不再等待
|
|
149
|
+
console.warn('JYBridge 初始化超时(30秒),停止等待');
|
|
150
|
+
resolve();
|
|
151
|
+
}
|
|
142
152
|
else {
|
|
143
153
|
setTimeout(checkBridge, 100);
|
|
144
154
|
}
|
|
@@ -153,24 +163,58 @@ var JYBridge = /** @class */ (function () {
|
|
|
153
163
|
* @param params 参数
|
|
154
164
|
*/
|
|
155
165
|
JYBridge.prototype.bridgeCallHandler = function (type, name, params) {
|
|
166
|
+
var _this = this;
|
|
156
167
|
if (type === void 0) { type = ''; }
|
|
157
168
|
if (name === void 0) { name = ''; }
|
|
158
169
|
if (params === void 0) { params = {}; }
|
|
159
170
|
if (type === 'Promise') {
|
|
160
171
|
return new Promise(function (resolve, reject) {
|
|
172
|
+
// 构造超时 reject 函数,避免重复定义
|
|
173
|
+
var timeoutReject = function () {
|
|
174
|
+
reject(new Error("\u8C03\u7528".concat(name, "\u65B9\u6CD5\u8D85\u65F6\uFF0810\u79D2\uFF09\uFF0CBridge\u53EF\u80FD\u4E0D\u53EF\u7528")));
|
|
175
|
+
};
|
|
176
|
+
// 设置10秒超时
|
|
177
|
+
var timeoutId = setTimeout(timeoutReject, 10000);
|
|
161
178
|
try {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
179
|
+
// 等待Bridge初始化完成后再执行
|
|
180
|
+
_this.waitForReady(300)
|
|
181
|
+
.then(function () {
|
|
182
|
+
// Bridge已就绪,执行调用
|
|
183
|
+
JYClientTHS.bridgeCallHandler(name, params, function (response) {
|
|
184
|
+
clearTimeout(timeoutId);
|
|
185
|
+
// 只要有响应就 resolve,即使是空对象或只有 login_status
|
|
186
|
+
// getUserInfoByRsa 未登录时返回 { login_status: "0" }
|
|
187
|
+
if (response !== undefined && response !== null) {
|
|
188
|
+
resolve(response);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
reject(new Error("\u8C03\u7528".concat(name, "\u65B9\u6CD5\u5931\u8D25\u4E86!")));
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
})
|
|
195
|
+
.catch(function () {
|
|
196
|
+
// waitForReady 超时,尝试直接连接
|
|
197
|
+
JYClientTHS.connectWebViewJavascriptBridge(function (bridge) {
|
|
198
|
+
if (bridge && typeof bridge.callHandler === 'function') {
|
|
199
|
+
bridge.callHandler(name, params, function (response) {
|
|
200
|
+
clearTimeout(timeoutId);
|
|
201
|
+
if (response !== undefined && response !== null) {
|
|
202
|
+
resolve(response);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
reject(new Error("\u8C03\u7528".concat(name, "\u65B9\u6CD5\u5931\u8D25\u4E86!")));
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
clearTimeout(timeoutId);
|
|
211
|
+
reject(new Error('Bridge不可用,请从App重新进入页面'));
|
|
212
|
+
}
|
|
213
|
+
});
|
|
171
214
|
});
|
|
172
215
|
}
|
|
173
216
|
catch (e) {
|
|
217
|
+
clearTimeout(timeoutId);
|
|
174
218
|
reject(e);
|
|
175
219
|
}
|
|
176
220
|
});
|