crh-jssdk 1.0.30 → 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.
@@ -64,7 +64,6 @@ var actionMap = {
64
64
  window.MyWebView.onJsOverrideUrlLoading(str);
65
65
  }
66
66
  else if (window.HarmonyOS && window.HarmonyOS.onJsOverrideUrlLoading) {
67
- console.log("HarmonyOS.onJsOverrideUrlLoading: ".concat(str));
68
67
  window.HarmonyOS.onJsOverrideUrlLoading(str);
69
68
  }
70
69
  else {
@@ -283,6 +282,12 @@ exports.default = {
283
282
  */
284
283
  setCollect: function (params) {
285
284
  var _this = this;
285
+ if ((0, utils_1.checkIsHarmonyOS)()) {
286
+ return {
287
+ error_no: "-1",
288
+ error_info: "暂不支持该功能",
289
+ };
290
+ }
286
291
  var sdkParams = {
287
292
  productNo: params.productNo,
288
293
  productCode: params.productCode,
@@ -351,6 +356,12 @@ exports.default = {
351
356
  queryCollect: function (params) {
352
357
  var _this = this;
353
358
  console.log('queryCollect', params);
359
+ if ((0, utils_1.checkIsHarmonyOS)()) {
360
+ return {
361
+ error_no: "-1",
362
+ error_info: "暂不支持该功能",
363
+ };
364
+ }
354
365
  var sdkParams = {
355
366
  productNo: params.productNo,
356
367
  productCode: params.productCode,
@@ -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 = 300;
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
- console.log('JYBridge 初始化完成');
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 初始化超时(30秒),停止等待');
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
- 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
- });
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
- if (this.bridge) {
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,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crh-jssdk",
3
- "version": "1.0.30",
3
+ "version": "1.0.31",
4
4
  "description": "crh-jssdk",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {