@onekeyfe/onekey-cross-webview 1.1.2 → 1.1.4
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/DesktopWebView.d.ts +7 -0
- package/dist/DesktopWebView.js +117 -9
- package/dist/cjs/DesktopWebView.js +123 -10
- package/dist/cjs/index.js +3 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.js +3 -2
- package/package.json +4 -4
package/dist/DesktopWebView.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { InpageProviderWebViewProps } from '@onekeyfe/cross-inpage-provider-types';
|
|
3
|
+
export declare function waitAsync(timeout: number): Promise<unknown>;
|
|
4
|
+
export declare function waitForDataLoaded({ data, wait, logName, timeout, }: {
|
|
5
|
+
data: (...args: any) => any;
|
|
6
|
+
wait?: number;
|
|
7
|
+
logName: string;
|
|
8
|
+
timeout?: number;
|
|
9
|
+
}): Promise<void>;
|
|
3
10
|
declare const DesktopWebView: React.ForwardRefExoticComponent<Pick<React.ClassAttributes<HTMLWebViewElement> & React.WebViewHTMLAttributes<HTMLWebViewElement> & InpageProviderWebViewProps, "slot" | "style" | "title" | "src" | "receiveHandler" | "onSrcChange" | "key" | "allowFullScreen" | "allowpopups" | "autoFocus" | "autosize" | "blinkfeatures" | "disableblinkfeatures" | "disableguestresize" | "disablewebsecurity" | "guestinstance" | "httpreferrer" | "nodeintegration" | "partition" | "plugins" | "preload" | "useragent" | "webpreferences" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture"> & React.RefAttributes<unknown>>;
|
|
4
11
|
export { DesktopWebView };
|
package/dist/DesktopWebView.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
1
10
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
11
|
var t = {};
|
|
3
12
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -14,6 +23,10 @@ import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo
|
|
|
14
23
|
import { consts } from '@onekeyfe/cross-inpage-provider-core';
|
|
15
24
|
import { JsBridgeDesktopHost } from './JsBridgeDesktopHost';
|
|
16
25
|
import { useIsIpcReady } from './useIsIpcReady';
|
|
26
|
+
import isNil from 'lodash/isNil';
|
|
27
|
+
import isEmpty from 'lodash/isEmpty';
|
|
28
|
+
import isPlainObject from 'lodash/isPlainObject';
|
|
29
|
+
import isArray from 'lodash/isArray';
|
|
17
30
|
const isDev = process.env.NODE_ENV !== 'production';
|
|
18
31
|
const isBrowser = true;
|
|
19
32
|
function usePreloadJsUrl() {
|
|
@@ -36,6 +49,64 @@ function usePreloadJsUrl() {
|
|
|
36
49
|
}
|
|
37
50
|
// Used for webview type referencing
|
|
38
51
|
const WEBVIEW_TAG = 'webview';
|
|
52
|
+
export function waitAsync(timeout) {
|
|
53
|
+
return new Promise((resolve) => {
|
|
54
|
+
setTimeout(resolve, timeout);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export function waitForDataLoaded({ data, wait = 600, logName, timeout = 0, }) {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
void (() => __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
let timeoutReject = false;
|
|
62
|
+
let timer = null;
|
|
63
|
+
const getDataArrFunc = [].concat(data);
|
|
64
|
+
if (timeout) {
|
|
65
|
+
timer = setTimeout(() => {
|
|
66
|
+
timeoutReject = true;
|
|
67
|
+
}, timeout);
|
|
68
|
+
}
|
|
69
|
+
// eslint-disable-next-line no-constant-condition
|
|
70
|
+
while (true) {
|
|
71
|
+
let isAllLoaded = true;
|
|
72
|
+
yield Promise.all(getDataArrFunc.map((getData) => __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
74
|
+
const d = yield getData();
|
|
75
|
+
if (d === false) {
|
|
76
|
+
isAllLoaded = false;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (isNil(d)) {
|
|
80
|
+
isAllLoaded = false;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (isEmpty(d)) {
|
|
84
|
+
if (isPlainObject(d) || isArray(d)) {
|
|
85
|
+
isAllLoaded = false;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
})));
|
|
90
|
+
if (isAllLoaded || timeoutReject) {
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
yield waitAsync(wait);
|
|
94
|
+
if (logName) {
|
|
95
|
+
console.log(`waitForDataLoaded: ${logName}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
99
|
+
clearTimeout(timer);
|
|
100
|
+
if (timeoutReject) {
|
|
101
|
+
reject(new Error(`waitForDataLoaded: ${logName !== null && logName !== void 0 ? logName : ''} timeout`));
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
resolve();
|
|
105
|
+
}
|
|
106
|
+
}))();
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
39
110
|
const DesktopWebView = forwardRef((_a, ref) => {
|
|
40
111
|
var { src, style, receiveHandler, onSrcChange } = _a, props = __rest(_a, ["src", "style", "receiveHandler", "onSrcChange"]);
|
|
41
112
|
const [isWebviewReady, setIsWebviewReady] = useState(false);
|
|
@@ -87,16 +158,53 @@ const DesktopWebView = forwardRef((_a, ref) => {
|
|
|
87
158
|
if (!webview || !isIpcReady || !isWebviewReady) {
|
|
88
159
|
return;
|
|
89
160
|
}
|
|
90
|
-
const handleMessage = (event) => {
|
|
91
|
-
var _a;
|
|
161
|
+
const handleMessage = (event) => __awaiter(void 0, void 0, void 0, function* () {
|
|
162
|
+
var _a, _b;
|
|
92
163
|
if (event.channel === consts.JS_BRIDGE_MESSAGE_IPC_CHANNEL) {
|
|
93
164
|
const data = (_a = event === null || event === void 0 ? void 0 : event.args) === null || _a === void 0 ? void 0 : _a[0];
|
|
165
|
+
let originInRequest = '';
|
|
166
|
+
try {
|
|
167
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
168
|
+
originInRequest = (_b = JSON.parse(data)) === null || _b === void 0 ? void 0 : _b.origin;
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
// noop
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
// noop
|
|
175
|
+
}
|
|
94
176
|
let origin = '';
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
177
|
+
yield waitForDataLoaded({
|
|
178
|
+
wait: 600,
|
|
179
|
+
logName: 'DesktopWebView waitForDataLoaded if origin matched',
|
|
180
|
+
timeout: 5000,
|
|
181
|
+
data: () => {
|
|
182
|
+
let originInUrl = '';
|
|
183
|
+
// url initial value is empty after webview mounted first time
|
|
184
|
+
const url1 = event.target.getURL(); // url won't update immediately when goForward or goBack
|
|
185
|
+
const url2 = event.target.src;
|
|
186
|
+
const url3 = src;
|
|
187
|
+
const url = url1 || url2 || url3;
|
|
188
|
+
if (url) {
|
|
189
|
+
try {
|
|
190
|
+
const uri = new URL(url);
|
|
191
|
+
originInUrl = (uri === null || uri === void 0 ? void 0 : uri.origin) || '';
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
// noop
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
// noop
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (originInUrl && originInRequest && originInUrl === originInRequest) {
|
|
201
|
+
origin = originInRequest;
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
return false;
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
if (origin) {
|
|
100
208
|
// - receive
|
|
101
209
|
jsBridgeHost.receive(data, { origin });
|
|
102
210
|
}
|
|
@@ -106,7 +214,7 @@ const DesktopWebView = forwardRef((_a, ref) => {
|
|
|
106
214
|
}
|
|
107
215
|
// response back
|
|
108
216
|
// webview.send();
|
|
109
|
-
};
|
|
217
|
+
});
|
|
110
218
|
webview.addEventListener('ipc-message', handleMessage);
|
|
111
219
|
return () => {
|
|
112
220
|
webview.removeEventListener('ipc-message', handleMessage);
|
|
@@ -132,7 +240,7 @@ const DesktopWebView = forwardRef((_a, ref) => {
|
|
|
132
240
|
setDevToolsAtLeft(!devToolsAtLeft);
|
|
133
241
|
(_a = webviewRef.current) === null || _a === void 0 ? void 0 : _a.openDevTools();
|
|
134
242
|
} }, "DevTools")),
|
|
135
|
-
isBrowser && (React.createElement("webview", Object.assign({ ref: initWebviewByRef, preload: preloadJsUrl, src: src, style: Object.assign({ 'width': '100%', 'height': '100%' }, style),
|
|
243
|
+
isBrowser && (React.createElement("webview", Object.assign({ ref: initWebviewByRef, preload: preloadJsUrl, src: isIpcReady && isWebviewReady ? src : undefined, style: Object.assign({ 'width': '100%', 'height': '100%' }, style),
|
|
136
244
|
// @ts-ignore
|
|
137
245
|
allowpopups: "true",
|
|
138
246
|
// @ts-ignore
|
|
@@ -18,6 +18,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
18
18
|
__setModuleDefault(result, mod);
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
22
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
23
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
25
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
26
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
27
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
+
});
|
|
29
|
+
};
|
|
21
30
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
22
31
|
var t = {};
|
|
23
32
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -29,13 +38,20 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
29
38
|
}
|
|
30
39
|
return t;
|
|
31
40
|
};
|
|
41
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
+
};
|
|
32
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
-
exports.DesktopWebView = void 0;
|
|
45
|
+
exports.DesktopWebView = exports.waitForDataLoaded = exports.waitAsync = void 0;
|
|
34
46
|
/* eslint-disable @typescript-eslint/ban-ts-comment, @typescript-eslint/no-explicit-any */
|
|
35
47
|
const react_1 = __importStar(require("react"));
|
|
36
48
|
const cross_inpage_provider_core_1 = require("@onekeyfe/cross-inpage-provider-core");
|
|
37
49
|
const JsBridgeDesktopHost_1 = require("./JsBridgeDesktopHost");
|
|
38
50
|
const useIsIpcReady_1 = require("./useIsIpcReady");
|
|
51
|
+
const isNil_1 = __importDefault(require("lodash/isNil"));
|
|
52
|
+
const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
|
|
53
|
+
const isPlainObject_1 = __importDefault(require("lodash/isPlainObject"));
|
|
54
|
+
const isArray_1 = __importDefault(require("lodash/isArray"));
|
|
39
55
|
const isDev = process.env.NODE_ENV !== 'production';
|
|
40
56
|
const isBrowser = true;
|
|
41
57
|
function usePreloadJsUrl() {
|
|
@@ -58,6 +74,66 @@ function usePreloadJsUrl() {
|
|
|
58
74
|
}
|
|
59
75
|
// Used for webview type referencing
|
|
60
76
|
const WEBVIEW_TAG = 'webview';
|
|
77
|
+
function waitAsync(timeout) {
|
|
78
|
+
return new Promise((resolve) => {
|
|
79
|
+
setTimeout(resolve, timeout);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
exports.waitAsync = waitAsync;
|
|
83
|
+
function waitForDataLoaded({ data, wait = 600, logName, timeout = 0, }) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
return new Promise((resolve, reject) => {
|
|
86
|
+
void (() => __awaiter(this, void 0, void 0, function* () {
|
|
87
|
+
let timeoutReject = false;
|
|
88
|
+
let timer = null;
|
|
89
|
+
const getDataArrFunc = [].concat(data);
|
|
90
|
+
if (timeout) {
|
|
91
|
+
timer = setTimeout(() => {
|
|
92
|
+
timeoutReject = true;
|
|
93
|
+
}, timeout);
|
|
94
|
+
}
|
|
95
|
+
// eslint-disable-next-line no-constant-condition
|
|
96
|
+
while (true) {
|
|
97
|
+
let isAllLoaded = true;
|
|
98
|
+
yield Promise.all(getDataArrFunc.map((getData) => __awaiter(this, void 0, void 0, function* () {
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
100
|
+
const d = yield getData();
|
|
101
|
+
if (d === false) {
|
|
102
|
+
isAllLoaded = false;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if ((0, isNil_1.default)(d)) {
|
|
106
|
+
isAllLoaded = false;
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if ((0, isEmpty_1.default)(d)) {
|
|
110
|
+
if ((0, isPlainObject_1.default)(d) || (0, isArray_1.default)(d)) {
|
|
111
|
+
isAllLoaded = false;
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
})));
|
|
116
|
+
if (isAllLoaded || timeoutReject) {
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
yield waitAsync(wait);
|
|
120
|
+
if (logName) {
|
|
121
|
+
console.log(`waitForDataLoaded: ${logName}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
125
|
+
clearTimeout(timer);
|
|
126
|
+
if (timeoutReject) {
|
|
127
|
+
reject(new Error(`waitForDataLoaded: ${logName !== null && logName !== void 0 ? logName : ''} timeout`));
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
resolve();
|
|
131
|
+
}
|
|
132
|
+
}))();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
exports.waitForDataLoaded = waitForDataLoaded;
|
|
61
137
|
const DesktopWebView = (0, react_1.forwardRef)((_a, ref) => {
|
|
62
138
|
var { src, style, receiveHandler, onSrcChange } = _a, props = __rest(_a, ["src", "style", "receiveHandler", "onSrcChange"]);
|
|
63
139
|
const [isWebviewReady, setIsWebviewReady] = (0, react_1.useState)(false);
|
|
@@ -109,16 +185,53 @@ const DesktopWebView = (0, react_1.forwardRef)((_a, ref) => {
|
|
|
109
185
|
if (!webview || !isIpcReady || !isWebviewReady) {
|
|
110
186
|
return;
|
|
111
187
|
}
|
|
112
|
-
const handleMessage = (event) => {
|
|
113
|
-
var _a;
|
|
188
|
+
const handleMessage = (event) => __awaiter(void 0, void 0, void 0, function* () {
|
|
189
|
+
var _a, _b;
|
|
114
190
|
if (event.channel === cross_inpage_provider_core_1.consts.JS_BRIDGE_MESSAGE_IPC_CHANNEL) {
|
|
115
191
|
const data = (_a = event === null || event === void 0 ? void 0 : event.args) === null || _a === void 0 ? void 0 : _a[0];
|
|
192
|
+
let originInRequest = '';
|
|
193
|
+
try {
|
|
194
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
195
|
+
originInRequest = (_b = JSON.parse(data)) === null || _b === void 0 ? void 0 : _b.origin;
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
// noop
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
// noop
|
|
202
|
+
}
|
|
116
203
|
let origin = '';
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
204
|
+
yield waitForDataLoaded({
|
|
205
|
+
wait: 600,
|
|
206
|
+
logName: 'DesktopWebView waitForDataLoaded if origin matched',
|
|
207
|
+
timeout: 5000,
|
|
208
|
+
data: () => {
|
|
209
|
+
let originInUrl = '';
|
|
210
|
+
// url initial value is empty after webview mounted first time
|
|
211
|
+
const url1 = event.target.getURL(); // url won't update immediately when goForward or goBack
|
|
212
|
+
const url2 = event.target.src;
|
|
213
|
+
const url3 = src;
|
|
214
|
+
const url = url1 || url2 || url3;
|
|
215
|
+
if (url) {
|
|
216
|
+
try {
|
|
217
|
+
const uri = new URL(url);
|
|
218
|
+
originInUrl = (uri === null || uri === void 0 ? void 0 : uri.origin) || '';
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
// noop
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
// noop
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (originInUrl && originInRequest && originInUrl === originInRequest) {
|
|
228
|
+
origin = originInRequest;
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
return false;
|
|
232
|
+
},
|
|
233
|
+
});
|
|
234
|
+
if (origin) {
|
|
122
235
|
// - receive
|
|
123
236
|
jsBridgeHost.receive(data, { origin });
|
|
124
237
|
}
|
|
@@ -128,7 +241,7 @@ const DesktopWebView = (0, react_1.forwardRef)((_a, ref) => {
|
|
|
128
241
|
}
|
|
129
242
|
// response back
|
|
130
243
|
// webview.send();
|
|
131
|
-
};
|
|
244
|
+
});
|
|
132
245
|
webview.addEventListener('ipc-message', handleMessage);
|
|
133
246
|
return () => {
|
|
134
247
|
webview.removeEventListener('ipc-message', handleMessage);
|
|
@@ -154,7 +267,7 @@ const DesktopWebView = (0, react_1.forwardRef)((_a, ref) => {
|
|
|
154
267
|
setDevToolsAtLeft(!devToolsAtLeft);
|
|
155
268
|
(_a = webviewRef.current) === null || _a === void 0 ? void 0 : _a.openDevTools();
|
|
156
269
|
} }, "DevTools")),
|
|
157
|
-
isBrowser && (react_1.default.createElement("webview", Object.assign({ ref: initWebviewByRef, preload: preloadJsUrl, src: src, style: Object.assign({ 'width': '100%', 'height': '100%' }, style),
|
|
270
|
+
isBrowser && (react_1.default.createElement("webview", Object.assign({ ref: initWebviewByRef, preload: preloadJsUrl, src: isIpcReady && isWebviewReady ? src : undefined, style: Object.assign({ 'width': '100%', 'height': '100%' }, style),
|
|
158
271
|
// @ts-ignore
|
|
159
272
|
allowpopups: "true",
|
|
160
273
|
// @ts-ignore
|
package/dist/cjs/index.js
CHANGED
|
@@ -10,9 +10,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
|
|
13
|
+
// DesktopWebView, NativeWebView moved to monorepo-app
|
|
14
|
+
// export * from './DesktopWebView';
|
|
15
|
+
// export * from './NativeWebView';
|
|
14
16
|
__exportStar(require("./JsBridgeDesktopHost"), exports);
|
|
15
|
-
__exportStar(require("./NativeWebView"), exports);
|
|
16
17
|
__exportStar(require("./JsBridgeNativeHost"), exports);
|
|
17
18
|
__exportStar(require("./useIsIpcReady"), exports);
|
|
18
19
|
__exportStar(require("./useWebViewBridge"), exports);
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
// DesktopWebView, NativeWebView moved to monorepo-app
|
|
2
|
+
// export * from './DesktopWebView';
|
|
3
|
+
// export * from './NativeWebView';
|
|
2
4
|
export * from './JsBridgeDesktopHost';
|
|
3
|
-
export * from './NativeWebView';
|
|
4
5
|
export * from './JsBridgeNativeHost';
|
|
5
6
|
export * from './useIsIpcReady';
|
|
6
7
|
export * from './useWebViewBridge';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/onekey-cross-webview",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"cross-inpage-provider"
|
|
6
6
|
],
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
"electron": "^17.2.0"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@onekeyfe/cross-inpage-provider-core": "1.1.
|
|
38
|
-
"@onekeyfe/cross-inpage-provider-types": "1.1.
|
|
37
|
+
"@onekeyfe/cross-inpage-provider-core": "1.1.4",
|
|
38
|
+
"@onekeyfe/cross-inpage-provider-types": "1.1.4",
|
|
39
39
|
"react-native-webview": "^11.17.2"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "3dac702516b0f256787a29d2dd373440d3a60f8c"
|
|
42
42
|
}
|