crh-jssdk 1.0.29 → 1.0.31
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.
- package/dist/business/utils/bridge.js +164 -17
- package/package.json +1 -1
|
@@ -5,6 +5,42 @@
|
|
|
5
5
|
* 1. WebViewJavascriptBridge - 通用模式(其他券商)
|
|
6
6
|
* 2. ClientTHS - 同花顺ClientTHS SDK模式(金圆统一)
|
|
7
7
|
*/
|
|
8
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
18
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
19
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
20
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
21
|
+
function step(op) {
|
|
22
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
23
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
24
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
25
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
26
|
+
switch (op[0]) {
|
|
27
|
+
case 0: case 1: t = op; break;
|
|
28
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
29
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
30
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
31
|
+
default:
|
|
32
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
33
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
34
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
35
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
36
|
+
if (t[2]) _.ops.pop();
|
|
37
|
+
_.trys.pop(); continue;
|
|
38
|
+
}
|
|
39
|
+
op = body.call(thisArg, _);
|
|
40
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
41
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
42
|
+
}
|
|
43
|
+
};
|
|
8
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
45
|
exports.JYClientTHS = exports.jyBridge = exports.globalBridge = exports.Bridge = exports.JYBridge = void 0;
|
|
10
46
|
// 在脚本加载时立即初始化全局标记
|
|
@@ -121,8 +157,60 @@ var JYBridge = /** @class */ (function () {
|
|
|
121
157
|
function JYBridge() {
|
|
122
158
|
this.bridge = null;
|
|
123
159
|
this.initPromise = null;
|
|
160
|
+
// 标记Bridge是否已知有效(首次成功调用后标记为true)
|
|
161
|
+
this._bridgeVerified = false;
|
|
124
162
|
this.initPromise = this.init();
|
|
125
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* 检查Bridge是否真正可用
|
|
166
|
+
* 原因:从第三方页面返回时,iOS WebView可能重建,导致缓存的bridge引用失效
|
|
167
|
+
* @returns {boolean}
|
|
168
|
+
*/
|
|
169
|
+
JYBridge.prototype.isBridgeAvailable = function () {
|
|
170
|
+
// 检查 window.WebViewJavascriptBridge 是否存在
|
|
171
|
+
if (!window.WebViewJavascriptBridge) {
|
|
172
|
+
console.warn('[JYBridge] Bridge不存在,需要重新连接');
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
// 检查 bridge 对象是否有 callHandler 方法
|
|
176
|
+
var wb = window.WebViewJavascriptBridge;
|
|
177
|
+
if (typeof wb.callHandler !== 'function') {
|
|
178
|
+
console.warn('[JYBridge] Bridge.callHandler方法不存在,可能已失效');
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
// 如果之前验证过bridge有效,标记为可用
|
|
182
|
+
if (this._bridgeVerified && this.bridge) {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
// 如果之前没验证过,但bridge存在,也认为可用(首次连接)
|
|
186
|
+
return true;
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* 主动重连Bridge
|
|
190
|
+
* 从第三方页面返回后调用此方法重置Bridge连接状态
|
|
191
|
+
* @returns {Promise<void>}
|
|
192
|
+
*/
|
|
193
|
+
JYBridge.prototype.reconnect = function () {
|
|
194
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
195
|
+
return __generator(this, function (_a) {
|
|
196
|
+
switch (_a.label) {
|
|
197
|
+
case 0:
|
|
198
|
+
console.log('[JYBridge] 开始重连Bridge...');
|
|
199
|
+
// 重置状态
|
|
200
|
+
this._bridgeVerified = false;
|
|
201
|
+
this.bridge = null;
|
|
202
|
+
this.initPromise = null;
|
|
203
|
+
// 重新初始化
|
|
204
|
+
this.initPromise = this.init();
|
|
205
|
+
return [4 /*yield*/, this.initPromise];
|
|
206
|
+
case 1:
|
|
207
|
+
_a.sent();
|
|
208
|
+
console.log('[JYBridge] Bridge重连完成');
|
|
209
|
+
return [2 /*return*/];
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
};
|
|
126
214
|
/**
|
|
127
215
|
* 初始化Bridge连接
|
|
128
216
|
* 使用ClientTHS初始化方式
|
|
@@ -135,18 +223,19 @@ var JYBridge = /** @class */ (function () {
|
|
|
135
223
|
JYClientTHS.init();
|
|
136
224
|
var checkCount = 0;
|
|
137
225
|
// 最多等待30秒(300次 * 100ms),超时后不再等待
|
|
138
|
-
var maxChecks =
|
|
226
|
+
var maxChecks = 30;
|
|
139
227
|
// 等待WebViewJavascriptBridgeReady事件
|
|
140
228
|
var checkBridge = function () {
|
|
141
229
|
checkCount++;
|
|
142
230
|
if (window.WebViewJavascriptBridge) {
|
|
143
231
|
_this.bridge = window.WebViewJavascriptBridge;
|
|
144
|
-
|
|
232
|
+
_this._bridgeVerified = true; // 标记为已验证
|
|
233
|
+
console.log('[JYBridge] 初始化完成,bridge已验证');
|
|
145
234
|
resolve();
|
|
146
235
|
}
|
|
147
236
|
else if (checkCount >= maxChecks) {
|
|
148
237
|
// 超时,不再等待
|
|
149
|
-
console.warn('JYBridge 初始化超时(
|
|
238
|
+
console.warn('[JYBridge] 初始化超时(3秒),停止等待');
|
|
150
239
|
resolve();
|
|
151
240
|
}
|
|
152
241
|
else {
|
|
@@ -179,23 +268,31 @@ var JYBridge = /** @class */ (function () {
|
|
|
179
268
|
// 等待Bridge初始化完成后再执行
|
|
180
269
|
_this.waitForReady(300)
|
|
181
270
|
.then(function () {
|
|
182
|
-
// Bridge
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
//
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
271
|
+
// 调用前检查Bridge是否真正可用
|
|
272
|
+
if (!_this.isBridgeAvailable()) {
|
|
273
|
+
console.warn('[JYBridge] Bridge不可用,尝试重连...');
|
|
274
|
+
// 尝试重连
|
|
275
|
+
return _this.reconnect().then(function () {
|
|
276
|
+
// 重连后再次检查
|
|
277
|
+
if (!_this.isBridgeAvailable()) {
|
|
278
|
+
clearTimeout(timeoutId);
|
|
279
|
+
reject(new Error('Bridge重连后仍不可用,请从App重新进入页面'));
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
// 执行调用
|
|
283
|
+
_this.doBridgeCall(name, params, resolve, reject, timeoutId);
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
// Bridge可用,执行调用
|
|
287
|
+
_this.doBridgeCall(name, params, resolve, reject, timeoutId);
|
|
194
288
|
})
|
|
195
289
|
.catch(function () {
|
|
196
290
|
// waitForReady 超时,尝试直接连接
|
|
291
|
+
console.warn('[JYBridge] waitForReady超时,尝试直接连接...');
|
|
197
292
|
JYClientTHS.connectWebViewJavascriptBridge(function (bridge) {
|
|
198
293
|
if (bridge && typeof bridge.callHandler === 'function') {
|
|
294
|
+
_this.bridge = bridge;
|
|
295
|
+
_this._bridgeVerified = true;
|
|
199
296
|
bridge.callHandler(name, params, function (response) {
|
|
200
297
|
clearTimeout(timeoutId);
|
|
201
298
|
if (response !== undefined && response !== null) {
|
|
@@ -228,6 +325,29 @@ var JYBridge = /** @class */ (function () {
|
|
|
228
325
|
}
|
|
229
326
|
return Promise.resolve();
|
|
230
327
|
};
|
|
328
|
+
/**
|
|
329
|
+
* 执行Bridge调用
|
|
330
|
+
* @param name 方法名
|
|
331
|
+
* @param params 参数
|
|
332
|
+
* @param resolve Promise resolve
|
|
333
|
+
* @param reject Promise reject
|
|
334
|
+
* @param timeoutId 超时计时器ID
|
|
335
|
+
*/
|
|
336
|
+
JYBridge.prototype.doBridgeCall = function (name, params, resolve, reject, timeoutId) {
|
|
337
|
+
var _this = this;
|
|
338
|
+
JYClientTHS.bridgeCallHandler(name, params, function (response) {
|
|
339
|
+
clearTimeout(timeoutId);
|
|
340
|
+
// 只要有响应就 resolve,即使是空对象或只有 login_status
|
|
341
|
+
// getUserInfoByRsa 未登录时返回 { login_status: "0" }
|
|
342
|
+
if (response !== undefined && response !== null) {
|
|
343
|
+
_this._bridgeVerified = true; // 标记为已验证可用
|
|
344
|
+
resolve(response);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
reject(new Error("\u8C03\u7528".concat(name, "\u65B9\u6CD5\u5931\u8D25\u4E86!")));
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
};
|
|
231
351
|
/**
|
|
232
352
|
* 调用App方法(纯回调版本,不返回Promise)
|
|
233
353
|
* @param name 方法名
|
|
@@ -266,16 +386,43 @@ var JYBridge = /** @class */ (function () {
|
|
|
266
386
|
* 检查Bridge是否已初始化
|
|
267
387
|
*/
|
|
268
388
|
JYBridge.prototype.isReady = function () {
|
|
269
|
-
return !!this.bridge;
|
|
389
|
+
return !!this.bridge && this.isBridgeAvailable();
|
|
270
390
|
};
|
|
271
391
|
/**
|
|
272
392
|
* 等待Bridge准备就绪
|
|
393
|
+
* 如果Bridge不可用,会尝试重连
|
|
273
394
|
*/
|
|
274
395
|
JYBridge.prototype.waitForReady = function (timeout) {
|
|
396
|
+
var _this = this;
|
|
275
397
|
if (timeout === void 0) { timeout = 300; }
|
|
276
|
-
|
|
398
|
+
// 如果Bridge存在且可用,直接返回
|
|
399
|
+
if (this.bridge && this.isBridgeAvailable()) {
|
|
277
400
|
return Promise.resolve();
|
|
278
401
|
}
|
|
402
|
+
// 如果Bridge不可用,尝试重连
|
|
403
|
+
if (this.bridge && !this.isBridgeAvailable()) {
|
|
404
|
+
console.warn('[JYBridge] Bridge不可用,尝试自动重连...');
|
|
405
|
+
return this.reconnect()
|
|
406
|
+
.then(function () {
|
|
407
|
+
if (_this.bridge && _this.isBridgeAvailable()) {
|
|
408
|
+
return Promise.resolve();
|
|
409
|
+
}
|
|
410
|
+
// 重连后仍然不可用,等待初始化的Promise
|
|
411
|
+
if (_this.initPromise) {
|
|
412
|
+
return Promise.race([
|
|
413
|
+
_this.initPromise,
|
|
414
|
+
new Promise(function (_, reject) {
|
|
415
|
+
setTimeout(function () { return reject(new Error('JYBridge重连后初始化超时')); }, timeout);
|
|
416
|
+
})
|
|
417
|
+
]);
|
|
418
|
+
}
|
|
419
|
+
return Promise.resolve();
|
|
420
|
+
})
|
|
421
|
+
.catch(function () {
|
|
422
|
+
return Promise.reject(new Error('JYBridge重连失败'));
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
// Bridge完全不存在,执行初始化
|
|
279
426
|
if (this.initPromise) {
|
|
280
427
|
return Promise.race([
|
|
281
428
|
this.initPromise,
|