@react-native-ohos/react-native-webview 13.15.1-rc.1

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.
Files changed (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.OpenSource +11 -0
  3. package/README.md +13 -0
  4. package/harmony/rn_webview/BuildProfile.ets +17 -0
  5. package/harmony/rn_webview/OAT.xml +45 -0
  6. package/harmony/rn_webview/build-profile.json5 +28 -0
  7. package/harmony/rn_webview/hvigorfile.ts +1 -0
  8. package/harmony/rn_webview/index.ets +13 -0
  9. package/harmony/rn_webview/oh-package.json5 +13 -0
  10. package/harmony/rn_webview/src/main/cpp/CMakeLists.txt +9 -0
  11. package/harmony/rn_webview/src/main/cpp/WebViewPackage.h +17 -0
  12. package/harmony/rn_webview/src/main/cpp/generated/RNOH/generated/BaseReactNativeWebviewPackage.h +95 -0
  13. package/harmony/rn_webview/src/main/cpp/generated/RNOH/generated/components/RNCWebViewJSIBinder.h +119 -0
  14. package/harmony/rn_webview/src/main/cpp/generated/RNOH/generated/turbo_modules/RNCWebView.cpp +18 -0
  15. package/harmony/rn_webview/src/main/cpp/generated/RNOH/generated/turbo_modules/RNCWebView.h +16 -0
  16. package/harmony/rn_webview/src/main/cpp/generated/RNOH/generated/turbo_modules/RNCWebViewModule.cpp +17 -0
  17. package/harmony/rn_webview/src/main/cpp/generated/RNOH/generated/turbo_modules/RNCWebViewModule.h +16 -0
  18. package/harmony/rn_webview/src/main/cpp/generated/react/renderer/components/react_native_webview/ComponentDescriptors.h +24 -0
  19. package/harmony/rn_webview/src/main/cpp/generated/react/renderer/components/react_native_webview/EventEmitters.cpp +241 -0
  20. package/harmony/rn_webview/src/main/cpp/generated/react/renderer/components/react_native_webview/EventEmitters.h +263 -0
  21. package/harmony/rn_webview/src/main/cpp/generated/react/renderer/components/react_native_webview/Props.cpp +103 -0
  22. package/harmony/rn_webview/src/main/cpp/generated/react/renderer/components/react_native_webview/Props.h +509 -0
  23. package/harmony/rn_webview/src/main/cpp/generated/react/renderer/components/react_native_webview/ShadowNodes.cpp +17 -0
  24. package/harmony/rn_webview/src/main/cpp/generated/react/renderer/components/react_native_webview/ShadowNodes.h +32 -0
  25. package/harmony/rn_webview/src/main/cpp/generated/react/renderer/components/react_native_webview/States.cpp +16 -0
  26. package/harmony/rn_webview/src/main/cpp/generated/react/renderer/components/react_native_webview/States.h +29 -0
  27. package/harmony/rn_webview/src/main/ets/CutomReference.ts +30 -0
  28. package/harmony/rn_webview/src/main/ets/Logger.ts +44 -0
  29. package/harmony/rn_webview/src/main/ets/Magic.ets +184 -0
  30. package/harmony/rn_webview/src/main/ets/RNCWebView.ets +571 -0
  31. package/harmony/rn_webview/src/main/ets/RNCWebViewPackage.ets +38 -0
  32. package/harmony/rn_webview/src/main/ets/ShouldRequestUrl.ts +48 -0
  33. package/harmony/rn_webview/src/main/ets/WebViewBaseOperate.ets +443 -0
  34. package/harmony/rn_webview/src/main/ets/WebViewTurboModule.ets +58 -0
  35. package/harmony/rn_webview/src/main/ets/generated/components/RNCWebView.ts +524 -0
  36. package/harmony/rn_webview/src/main/ets/generated/components/ts.ts +5 -0
  37. package/harmony/rn_webview/src/main/ets/generated/index.ets +5 -0
  38. package/harmony/rn_webview/src/main/ets/generated/ts.ts +6 -0
  39. package/harmony/rn_webview/src/main/ets/generated/turboModules/RNCWebView.ts +18 -0
  40. package/harmony/rn_webview/src/main/ets/generated/turboModules/RNCWebViewModule.ts +16 -0
  41. package/harmony/rn_webview/src/main/ets/generated/turboModules/ts.ts +6 -0
  42. package/harmony/rn_webview/src/main/module.json5 +11 -0
  43. package/harmony/rn_webview/src/main/resources/base/element/string.json +40 -0
  44. package/harmony/rn_webview/src/main/resources/en_US/element/string.json +40 -0
  45. package/harmony/rn_webview/src/main/resources/zh_CN/element/string.json +40 -0
  46. package/harmony/rn_webview/src/test/List.test.ets +5 -0
  47. package/harmony/rn_webview/src/test/LocalUnit.test.ets +33 -0
  48. package/harmony/rn_webview/ts.ets +9 -0
  49. package/harmony/rn_webview.har +0 -0
  50. package/package.json +99 -0
  51. package/src/NativeRNCWebView.ts +22 -0
  52. package/src/NativeRNCWebViewModule.ts +19 -0
  53. package/src/RNCWebViewNativeComponent.ts +354 -0
  54. package/src/WebView.harmony.tsx +343 -0
  55. package/src/WebView.tsx +10 -0
  56. package/src/codegenUtils.ts +11 -0
  57. package/src/index.ts +10 -0
@@ -0,0 +1,443 @@
1
+ // Copyright (c) 2025 Huawei Device Co., Ltd. All rights reserved
2
+ // Use of this source code is governed by a Apache-2.0 license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import { RNC } from './generated/ts'
6
+ import { webview } from '@kit.ArkWeb'
7
+ import { CACHE_MODE, COMMAND_NAME, ONE_HUNDRED, WebViewEventParams } from './Magic';
8
+ import Logger from './Logger';
9
+ import { common, ConfigurationConstant } from '@kit.AbilityKit';
10
+
11
+ export const TAG = "WebView"
12
+
13
+
14
+ interface ProgressInterface {
15
+ progress: number;
16
+ }
17
+
18
+ interface CreateWebViewEventInterface {
19
+ type: string;
20
+ progress: number;
21
+ }
22
+
23
+ export class BaseOperate {
24
+ private static LOCK_IDENTIFIER = 0
25
+ private eventEmitter: RNC.RNCWebView.EventEmitter
26
+ private controller: webview.WebviewController
27
+ private lockIdentifier: number = 0
28
+
29
+ constructor(eventEmitter: RNC.RNCWebView.EventEmitter, controller: webview.WebviewController) {
30
+ this.eventEmitter = eventEmitter
31
+ this.controller = controller
32
+ this.lockIdentifier = BaseOperate.generateLockIdentifier()
33
+ }
34
+
35
+ static setThirdPartyCookiesEnabled(status: boolean) {
36
+ try {
37
+ webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(status);
38
+ } catch (error) {
39
+ Logger.error(TAG, `[RNOH] setThirdPartyCookiesEnabled Errorcode: ${error.code}`);
40
+ }
41
+ }
42
+
43
+ static getColorMode(context: common.UIAbilityContext, forceDarkOn: boolean): WebDarkMode {
44
+ try {
45
+ return ((context.config.colorMode === ConfigurationConstant.ColorMode.COLOR_MODE_DARK) && forceDarkOn) ?
46
+ WebDarkMode.On : WebDarkMode.Off
47
+ } catch (error) {
48
+ Logger.error(TAG, `[RNOH] getColorMode Errorcode: ${error.code}`);
49
+ return WebDarkMode.Off
50
+ }
51
+ }
52
+
53
+ static generateLockIdentifier(): number {
54
+ BaseOperate.LOCK_IDENTIFIER = BaseOperate.LOCK_IDENTIFIER + 1
55
+ return BaseOperate.LOCK_IDENTIFIER
56
+ }
57
+
58
+ getLockIdentifier():number {
59
+ return this.lockIdentifier
60
+ }
61
+
62
+ setLockIdentifier(lockIdentifier: number) {
63
+ this.lockIdentifier = lockIdentifier
64
+ }
65
+
66
+ emitProgressChange(params: ProgressInterface) {
67
+ try {
68
+ this.eventEmitter!.emit('loadingProgress', {
69
+ url: this.controller.getUrl(),
70
+ loading: params.progress != ONE_HUNDRED,
71
+ title: this.controller.getTitle(),
72
+ canGoBack: this.controller.accessBackward(),
73
+ canGoForward: this.controller.accessForward(),
74
+ lockIdentifier: this.lockIdentifier,
75
+ progress: params.progress / ONE_HUNDRED
76
+ })
77
+ } catch (error) {
78
+ Logger.error(TAG, `[RNOH] emitProgressChange Errorcode: ${error.code}`);
79
+ }
80
+ }
81
+
82
+ emitLoadingStart(params: ProgressInterface) {
83
+ try {
84
+ this.eventEmitter!.emit('loadingStart', {
85
+ url: this.controller.getUrl(),
86
+ loading: params.progress != ONE_HUNDRED,
87
+ title: this.controller.getTitle(),
88
+ canGoBack: this.controller.accessBackward(),
89
+ canGoForward: this.controller.accessForward(),
90
+ lockIdentifier: this.lockIdentifier,
91
+ navigationType: "other",
92
+ mainDocumentURL: ""
93
+ })
94
+ } catch (error) {
95
+ Logger.error(TAG, `[RNOH] emitLoadingStart Errorcode: ${error.code}`);
96
+ }
97
+ }
98
+
99
+ emitLoadingFinish(params: ProgressInterface) {
100
+ try {
101
+ this.eventEmitter!.emit('loadingFinish', {
102
+ url: this.controller.getUrl(),
103
+ loading: params.progress != ONE_HUNDRED,
104
+ title: this.controller.getTitle(),
105
+ canGoBack: this.controller.accessBackward(),
106
+ canGoForward: this.controller.accessForward(),
107
+ lockIdentifier: this.lockIdentifier,
108
+ navigationType: "other",
109
+ mainDocumentURL: ""
110
+ })
111
+ } catch (error) {
112
+ Logger.error(TAG, `[RNOH] emitLoadingFinish Errorcode: ${error.code}`);
113
+ }
114
+ }
115
+
116
+ emitLoadingError(event: OnErrorReceiveEvent) {
117
+ try {
118
+ if (!event.request.isMainFrame()) {
119
+ Logger.debug(TAG, "[RNOH] Not Main Frame Error");
120
+ return;
121
+ }
122
+ this.eventEmitter!.emit('loadingError', {
123
+ url: this.controller.getUrl(),
124
+ loading: false,
125
+ title: this.controller.getTitle(),
126
+ canGoBack: this.controller.accessBackward(),
127
+ canGoForward: this.controller.accessForward(),
128
+ lockIdentifier: this.lockIdentifier,
129
+ domain: "",
130
+ code: event.error.getErrorCode(),
131
+ description: event.error.getErrorInfo()
132
+ })
133
+ } catch (error) {
134
+ Logger.error(TAG, `[RNOH] emitLoadingError Errorcode: ${error.code}`);
135
+ }
136
+ }
137
+
138
+ emitHttpError(event: OnHttpErrorReceiveEvent) {
139
+ try {
140
+ this.eventEmitter!.emit('httpError', {
141
+ url: this.controller.getUrl(),
142
+ loading: false,
143
+ title: this.controller.getTitle(),
144
+ canGoBack: this.controller.accessBackward(),
145
+ canGoForward: this.controller.accessForward(),
146
+ lockIdentifier: this.lockIdentifier,
147
+ description: event.response.getResponseData(),
148
+ statusCode: event.response.getResponseCode()
149
+ })
150
+ } catch (error) {
151
+ Logger.error(TAG, `[RNOH] emitHttpError Errorcode: ${error.code}`);
152
+ }
153
+ }
154
+
155
+ emitScroll(event: OnScrollEvent) {
156
+ try {
157
+ this.eventEmitter!.emit('scroll', {
158
+ contentInset: {
159
+ bottom: 0,
160
+ left: 0,
161
+ right: 0,
162
+ top: 0
163
+ },
164
+ contentOffset: { y: event.yOffset, x: event.xOffset },
165
+ contentSize: { height: 0, width: 0 },
166
+ layoutMeasurement: { height: 0, width: 0 }
167
+ })
168
+ } catch (error) {
169
+ Logger.error(TAG, `[RNOH] emitScroll Errorcode: ${error.code}`);
170
+ }
171
+ }
172
+
173
+ emitShouldStartLoadWithRequest(event: OnLoadInterceptEvent) {
174
+ try {
175
+ this.eventEmitter!.emit('shouldStartLoadWithRequest', {
176
+ url: event.data.getRequestUrl(),
177
+ loading: false,
178
+ title: this.controller.getTitle(),
179
+ canGoBack: this.controller.accessBackward(),
180
+ canGoForward: this.controller.accessForward(),
181
+ lockIdentifier: this.lockIdentifier,
182
+ navigationType: "other",
183
+ mainDocumentURL: "",
184
+ isTopFrame: false
185
+ })
186
+ } catch (error) {
187
+ Logger.error(TAG, `[RNOH] emitShouldStartLoadWithRequest Errorcode: ${error.code}`);
188
+ }
189
+ }
190
+
191
+ emitShouldStartLoadWithRequestOverrideUrlLoading(event: WebResourceRequest) {
192
+ try {
193
+ this.eventEmitter!.emit('shouldStartLoadWithRequest', {
194
+ url: event.getRequestUrl(),
195
+ loading: false,
196
+ title: this.controller.getTitle(),
197
+ canGoBack: this.controller.accessBackward(),
198
+ canGoForward: this.controller.accessForward(),
199
+ lockIdentifier: this.lockIdentifier,
200
+ navigationType: "other",
201
+ mainDocumentURL: "",
202
+ isTopFrame: false
203
+ })
204
+ } catch (error) {
205
+ Logger.error(TAG, `[RNOH] emitShouldStartLoadWithRequest Errorcode: ${error.code}`);
206
+ }
207
+ }
208
+
209
+ transCacheMode(cacheMode: CACHE_MODE): CacheMode {
210
+ let mode = CacheMode.Default
211
+ switch (cacheMode) {
212
+ case CACHE_MODE.LOAD_DEFAULT:
213
+ mode = CacheMode.Default
214
+ break;
215
+ case CACHE_MODE.LOAD_CACHE_ELSE_NETWORK:
216
+ mode = CacheMode.None
217
+ break;
218
+ case CACHE_MODE.LOAD_NO_CACHE:
219
+ mode = CacheMode.Online
220
+ break;
221
+ case CACHE_MODE.LOAD_CACHE_ONLY:
222
+ mode = CacheMode.Only
223
+ break;
224
+ default:
225
+ break;
226
+ }
227
+ return mode
228
+ }
229
+
230
+ createWebViewEvent(param: CreateWebViewEventInterface): WebViewEventParams {
231
+ let result: WebViewEventParams = new WebViewEventParams(param.type);
232
+ result.loading = param.progress != ONE_HUNDRED
233
+ try {
234
+ result.url = this.controller.getUrl();
235
+ result.title = this.controller.getTitle();
236
+ result.canGoBack = this.controller.accessBackward();
237
+ result.canGoForward = this.controller.accessForward();
238
+ } catch (error) {
239
+ result.url = "";
240
+ result.title = "";
241
+ result.canGoBack = false;
242
+ result.canGoForward = false;
243
+ }
244
+ return result;
245
+ }
246
+
247
+ // 与OS web同事 对齐 默认false 是取消静音
248
+ ignoreSilentHardwareSwitchMethods(ignoreSilentHardwareSwitch: boolean) {
249
+ this.controller.setAudioMuted(!ignoreSilentHardwareSwitch)
250
+ }
251
+
252
+ setCustomUserAgent(customUserAgent?: string, applicationNameForUserAgent?: string): void {
253
+ try {
254
+ if (customUserAgent) {
255
+ let userAgent: string = customUserAgent;
256
+ this.controller.setCustomUserAgent(userAgent);
257
+ }
258
+ if (applicationNameForUserAgent) {
259
+ this.controller.setCustomUserAgent(`${this.controller.getUserAgent()}${applicationNameForUserAgent}`);
260
+ }
261
+ } catch (error) {
262
+ Logger.debug(TAG,
263
+ `[RNOH] setCustomUserAgent ErrorCode: ${error.code}, userAgent: ${customUserAgent}`);
264
+ }
265
+ }
266
+
267
+ injectJavaScript(args: string[]) {
268
+ try {
269
+ this.controller.runJavaScript(args[0])
270
+ } catch (error) {
271
+ Logger.error(TAG, `[RNOH] injectJavaScript Errorcode: ${error.code}`);
272
+ }
273
+ }
274
+
275
+ postMessage(args: string[]) {
276
+ let data = JSON.stringify({ data: args[0] })
277
+ let result: string = "(function () {" +
278
+ "var event;" +
279
+ "var data = " + data.toString() + ";" +
280
+ "try {" +
281
+ "event = new MessageEvent('message', data);" +
282
+ "} catch (e) {" +
283
+ "event = document.createEvent('MessageEvent');" +
284
+ "event.initMessageEvent('message', true, true, data.data, data.origin, data.lastEventId, data.source);" +
285
+ "}" +
286
+ "document.dispatchEvent(event);" +
287
+ "})();"
288
+ try {
289
+ this.controller.runJavaScript(result)
290
+ } catch (error) {
291
+ Logger.error(TAG, `[RNOH] postMessage Errorcode: ${error.code}`);
292
+ }
293
+ }
294
+
295
+ reload() {
296
+ try {
297
+ this.controller.refresh();
298
+ } catch (error) {
299
+ Logger.error(TAG, `[RNOH] reload Errorcode: ${error.code}`);
300
+ }
301
+ }
302
+
303
+ goBack() {
304
+ try {
305
+ this.controller.backward();
306
+ } catch (error) {
307
+ Logger.error(TAG, `[RNOH] goBack Errorcode: ${error.code}`);
308
+ }
309
+ }
310
+
311
+ goForward() {
312
+ try {
313
+ this.controller.forward();
314
+ } catch (error) {
315
+ Logger.error(TAG, `[RNOH] goForward Errorcode: ${error.code}`);
316
+ }
317
+ }
318
+
319
+ requestFocus() {
320
+ try {
321
+ this.controller.requestFocus();
322
+ } catch (error) {
323
+ Logger.error(TAG, `[RNOH] requestFocus Errorcode: ${error.code}`);
324
+ }
325
+ }
326
+
327
+ clearCache(args: string[]) {
328
+ try {
329
+ const removeFlag = !!args[0] === true;
330
+ this.controller.removeCache(removeFlag);
331
+ } catch (error) {
332
+ Logger.error(TAG, `[RNOH] clearCache Errorcode: ${error.code}`);
333
+ }
334
+ }
335
+
336
+ clearHistory() {
337
+ try {
338
+ this.controller.clearHistory();
339
+ } catch (error) {
340
+ Logger.error(TAG, `[RNOH] clearHistory Errorcode: ${error.code}`);
341
+ }
342
+ }
343
+
344
+ stopLoading() {
345
+ try {
346
+ this.controller.stop();
347
+ } catch (error) {
348
+ Logger.error(TAG, `[RNOH] stopLoading Errorcode: ${error.code}`);
349
+ }
350
+ }
351
+
352
+ loadUrl(args: string[]) {
353
+ try {
354
+ this.controller.loadUrl(args[0]);
355
+ } catch (error) {
356
+ Logger.error(TAG, `[RNOH] loadUrl Errorcode: ${error.code}`);
357
+ }
358
+ }
359
+
360
+ registerCommandCallback(commandName: COMMAND_NAME, args: string[]) {
361
+ switch (commandName) {
362
+ case COMMAND_NAME.INJECTJAVASCRIPT:
363
+ this.injectJavaScript(args)
364
+ break
365
+ case COMMAND_NAME.POSTMESSAGE:
366
+ this.postMessage(args)
367
+ break
368
+ case COMMAND_NAME.RELOAD:
369
+ this.reload()
370
+ break
371
+ case COMMAND_NAME.GOBACK:
372
+ this.goBack()
373
+ break
374
+ case COMMAND_NAME.GOFORWARD:
375
+ this.goForward()
376
+ break
377
+ case COMMAND_NAME.REQUESTFOCUS:
378
+ this.requestFocus()
379
+ case COMMAND_NAME.CLEARCACHE:
380
+ this.clearCache(args)
381
+ case COMMAND_NAME.CLEARHISTORY:
382
+ this.clearHistory()
383
+ break
384
+ case COMMAND_NAME.STOPLOADING:
385
+ this.stopLoading()
386
+ break
387
+ case COMMAND_NAME.LOADURL:
388
+ this.loadUrl(args)
389
+ break
390
+ default:
391
+ break
392
+ }
393
+ }
394
+
395
+ setOriginWhitelist(uris: string) {
396
+ try {
397
+ this.controller.setUrlTrustList(uris);
398
+ } catch (error) {
399
+ Logger.error(TAG, `[RNOH] setOriginWhitelist Errorcode: ${error.code}`);
400
+ }
401
+ }
402
+
403
+ setIncognito() {
404
+ this.controller.clearHistory()
405
+ webview.WebCookieManager.clearAllCookiesSync(true);
406
+ webview.WebCookieManager.clearSessionCookieSync()
407
+ webview.WebStorage.deleteAllData();
408
+ }
409
+
410
+ setFraudulentWebsiteWarningEnabled(status: boolean) {
411
+ try {
412
+ this.controller.enableSafeBrowsing(status);
413
+ } catch (error) {
414
+ Logger.error(TAG, `[RNOH] setFraudulentWebsiteWarningEnabled Errorcode: ${error.code}`);
415
+ }
416
+ }
417
+
418
+ onDownloadStart(event: OnDownloadStartEvent) {
419
+ try {
420
+ this.eventEmitter!.emit('fileDownload', {
421
+ downloadUrl: event.url
422
+ })
423
+ } catch (error) {
424
+ Logger.error(TAG, `[RNOH] onDownloadStart Errorcode: ${error.code}`);
425
+ }
426
+ }
427
+
428
+ onRenderExited(event: OnRenderExitedEvent) {
429
+ try {
430
+
431
+ } catch (error) {
432
+ Logger.error(TAG, `[RNOH] onRenderExited Errorcode: ${error.code}`);
433
+ }
434
+ }
435
+
436
+ onTitleReceive(event: OnTitleReceiveEvent) {
437
+ try {
438
+
439
+ } catch (error) {
440
+ Logger.error(TAG, `[RNOH] onTitleReceive Errorcode: ${error.code}`);
441
+ }
442
+ }
443
+ }
@@ -0,0 +1,58 @@
1
+ // Copyright (c) 2025 Huawei Device Co., Ltd. All rights reserved
2
+ // Use of this source code is governed by a Apache-2.0 license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import { TM } from './generated/ts';
6
+ import { AnyThreadTurboModule } from '@rnoh/react-native-openharmony/ts';
7
+ import Logger from './Logger';
8
+
9
+ const TAG = "WebViewTurboModule"
10
+
11
+ export class WebViewTurboModule extends AnyThreadTurboModule implements TM.RNCWebViewModule.Spec {
12
+ private shouldStartParamsMap : Map<number,ShouldStartParams> = new Map();
13
+
14
+ isFileUploadSupported(): Promise<boolean> {
15
+ return Promise.resolve(true)
16
+ }
17
+
18
+ shouldStartLoadWithLockIdentifier(shouldStart: boolean, lockIdentifier: number): void {
19
+ Logger.debug("shouldStartLoadWithLockIdentifier:" + shouldStart + " lockIdentifier:" + lockIdentifier)
20
+ let shouldStartParams = this.shouldStartParamsMap.get(lockIdentifier)
21
+ Logger.debug("shouldStartLoadWithLockIdentifier setShouldStartParams:" + JSON.stringify(shouldStartParams))
22
+ if (shouldStartParams) {
23
+ shouldStartParams.shouldStart = shouldStart
24
+ shouldStartParams.lockState = shouldStart ? ShouldOverrideCallbackState.ALLOW_LOADING : ShouldOverrideCallbackState.SHOULD_OVERRIDE;
25
+ }
26
+ this.shouldStartParamsMap.set(lockIdentifier,shouldStartParams || new ShouldStartParams())
27
+ }
28
+
29
+
30
+ setShouldStartParams(params: ShouldStartParams){
31
+ Logger.debug("setShouldStartParams:" + JSON.stringify(params))
32
+ this.shouldStartParamsMap.set(params.lockIdentifier,params)
33
+ }
34
+ }
35
+
36
+ // 锁状态
37
+ export enum ShouldOverrideCallbackState {
38
+ /**
39
+ * 初始状态
40
+ */
41
+ UNDECIDED,
42
+ /**
43
+ * 阻止加载
44
+ */
45
+ SHOULD_OVERRIDE,
46
+ /**
47
+ * 允许加载
48
+ */
49
+ ALLOW_LOADING,
50
+ }
51
+
52
+ @Sendable
53
+ export class ShouldStartParams {
54
+ shouldStart: boolean = true
55
+ lockIdentifier: number = -1
56
+ // 对应ShouldOverrideCallbackState
57
+ lockState: number = 0
58
+ }