@hylid/call 3.1.0 → 3.2.0-alpha.0

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.
@@ -0,0 +1,3 @@
1
+ import { Message, MessageHandler } from './types';
2
+ export declare function mpWebOnMessage(cb: MessageHandler): () => void;
3
+ export declare function mpWebPostMessage(message: Message): void;
@@ -0,0 +1,75 @@
1
+ var __rest = this && this.__rest || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
4
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
5
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
6
+ }
7
+ return t;
8
+ };
9
+ /** 加载 appx 脚本 */
10
+ var loadAppxBridge = function loadAppxBridge(cb) {
11
+ var _a;
12
+ try {
13
+ // umd 包用的 IFF 模式,会立即向 window.my 上注入 jsapi,所以不能使用 window.my 判断是否已经加载了 appx 脚本
14
+ // umd 版本和 modules 版本不能混用
15
+ if ((_a = window.my) === null || _a === void 0 ? void 0 : _a.__hy_mounted__) {
16
+ cb && cb("ready" /* BridgeReady.READY */);
17
+ return;
18
+ }
19
+ var hyMy_1 = window.my || {};
20
+ var script_1 = document.createElement('script');
21
+ script_1.src = 'https://appx/web-view.min.js';
22
+ script_1.onload = function onload() {
23
+ var readyState = script_1['readyState'];
24
+ if (typeof readyState === 'undefined' || /^(loaded|complete)$/.test(readyState)) {
25
+ script_1.onload = null;
26
+ // appx 脚本覆盖了 window 的 my 属性,这里再把 hylid-bridge 的 API 挂上去
27
+ var postMessage_1 = hyMy_1.postMessage,
28
+ api = __rest(hyMy_1, ["postMessage"]);
29
+ Object.assign(window.my, api, {
30
+ __hy_mounted__: true
31
+ });
32
+ cb && cb("loaded" /* BridgeReady.LOADED */);
33
+ }
34
+ };
35
+ var head = document.getElementsByTagName('head')[0] || document.body;
36
+ head.appendChild(script_1);
37
+ } catch (e) {
38
+ cb && cb(null);
39
+ }
40
+ };
41
+ var isListening = false;
42
+ var WAITING_QUEUE = [];
43
+ var MESSAGE_HANDLER = [];
44
+ export function mpWebOnMessage(cb) {
45
+ MESSAGE_HANDLER.push(cb);
46
+ return function () {
47
+ var index = MESSAGE_HANDLER.indexOf(cb);
48
+ if (index > -1) {
49
+ MESSAGE_HANDLER.splice(index, 1);
50
+ }
51
+ };
52
+ }
53
+ export function mpWebPostMessage(message) {
54
+ return loadAppxBridge(function (bridgeReady) {
55
+ if (bridgeReady) {
56
+ if (!isListening) {
57
+ var messageHandler_1 = window.my.onMessage;
58
+ window.my.onMessage = function (message) {
59
+ MESSAGE_HANDLER.forEach(function (fn) {
60
+ return fn(message);
61
+ });
62
+ if (messageHandler_1) messageHandler_1(message);
63
+ };
64
+ isListening = true;
65
+ }
66
+ if (WAITING_QUEUE.length) {
67
+ WAITING_QUEUE.forEach(window.my.postMessage);
68
+ WAITING_QUEUE = [];
69
+ }
70
+ window.my.postMessage(message);
71
+ } else {
72
+ WAITING_QUEUE.push(message);
73
+ }
74
+ });
75
+ }
package/lib/mpWebCall.js CHANGED
@@ -20,7 +20,6 @@ var loadAppxBridge = function loadAppxBridge(cb) {
20
20
  cb && cb("loaded" /* BridgeReady.LOADED */);
21
21
  }
22
22
  };
23
-
24
23
  var head = document.getElementsByTagName('head')[0] || document.body;
25
24
  head.appendChild(script_1);
26
25
  } catch (e) {
@@ -153,7 +153,6 @@ var WebViewBridge = /** @class */function () {
153
153
  this.webview.postMessage(notAllowedMessage);
154
154
  return [2 /*return*/];
155
155
  }
156
-
157
156
  if (type === 'callback') {
158
157
  // @ts-ignore
159
158
  my[api](function (result) {
@@ -175,7 +174,6 @@ var WebViewBridge = /** @class */function () {
175
174
  });
176
175
  });
177
176
  };
178
-
179
177
  this.handleApi = function (data) {
180
178
  var api = data.api,
181
179
  _options = data.options,
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@hylid/call",
3
- "version": "3.1.0",
3
+ "version": "3.2.0-alpha.0",
4
4
  "main": "lib/index.js",
5
5
  "files": [
6
6
  "lib"
7
7
  ],
8
8
  "dependencies": {
9
- "@hylid/env": "^3.1.0",
10
- "@hylid/types": "^3.1.0"
9
+ "@hylid/env": "^3.2.0-alpha.0",
10
+ "@hylid/types": "^3.2.0-alpha.0"
11
11
  },
12
12
  "publishConfig": {
13
13
  "access": "public"