From 2144dc1e1c17d373275d6b77045f064b84b54ecb Mon Sep 17 00:00:00 2001 From: 17691002584 <17691002584@163.com> Date: Wed, 28 Aug 2024 20:05:49 +0800 Subject: [PATCH] =?UTF-8?q?style:=E6=8A=BD=E7=A6=BBview=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rn_webview/src/main/ets/RNCWebView.ets | 123 ++++++------------ .../src/main/ets/WebViewBaseOperate.ets | 24 ++-- 2 files changed, 56 insertions(+), 91 deletions(-) diff --git a/harmony/rn_webview/src/main/ets/RNCWebView.ets b/harmony/rn_webview/src/main/ets/RNCWebView.ets index d7516147b..20e8eccdb 100644 --- a/harmony/rn_webview/src/main/ets/RNCWebView.ets +++ b/harmony/rn_webview/src/main/ets/RNCWebView.ets @@ -277,7 +277,8 @@ export struct RNCWebView { this.webViewBaseOperate?.emitLoadingStart({ progress: this.progress }) } - onProgressChange() { + onProgressChange(event: OnProgressChangeEvent) { + this.progress = event.newProgress // 修复单页面应用切换路由时 onPageBegin 未触发的问题 if (this.controller.getUrl() !== this.url && this.progress < ONE_HUNDRED && this.allowPageStartInProgress) { this.allowPageStartInProgress = false; @@ -293,18 +294,6 @@ export struct RNCWebView { this.webViewBaseOperate?.emitLoadingFinish({ progress: this.progress }) } - onLoadingError(code: number, description: string) { - this.webViewBaseOperate?.emitLoadingError({ code, description }) - } - - onHttpError(code: number, description: string) { - this.webViewBaseOperate?.emitHttpError({ code, description }) - } - - scroll(x: number, y: number) { - this.webViewBaseOperate?.emitScroll({ x, y }) - } - onShouldStartLoadWithRequest() { this.webViewBaseOperate?.emitShouldStartLoadWithRequest({ progress: this.progress }) } @@ -390,10 +379,35 @@ export struct RNCWebView { this.eventEmitter = new RNC.RNCWebView.EventEmitter(this.ctx.rnInstance, this.tag) this.webViewBaseOperate = new BaseOperate(this.eventEmitter, this.controller) this.webViewBaseOperate.setCustomUserAgent(this.descriptorWrapper.props.userAgent) + let baseUrl = this.source.baseUrl + let uri = this.source.uri + if (this.source.html != undefined && this.source.html != "") { + try { + this.controller.loadData( + this.source.html, + "text/html", + "UTF-8", + baseUrl, + " " + ); + } catch (error) { + Logger.error(TAG, "error:" + error) + } + } else if (uri != undefined && uri != "") { + this.controller.loadUrl(uri, this.headers); + } else { + this.controller.loadUrl(uri, this.headers); + } + if (!this.hasRegisterJavaScriptProxy) { + this.registerPostMessage() + } } - onPageBeginInit() { + onPageBegin() { try { + if (this.controller.getUrl() === this.url) { + this.onLoadingStart(); + } this.controller.setScrollable(this.scrollEnabled) this.ignoreSilentHardwareSwitchMethods(this.descriptorWrapper.props.ignoreSilentHardwareSwitch) } catch (error) { @@ -426,6 +440,11 @@ export struct RNCWebView { return getContext(this).resourceManager.getStringSync(resource) } + onPageEnd() { + this.runInjectedJavaScript() + this.onLoadingFinish() + } + getPermissionDialogMessage(event: OnPermissionRequestEvent) { let permissionDialogMessage = '' permissionDialogMessage = event.request.getAccessibleResource().toString() @@ -493,79 +512,17 @@ export struct RNCWebView { .domStorageAccess(this.descriptorWrapper.props.domStorageEnabled) .zoomAccess(this.descriptorWrapper.props.scalesPageToFit) .overScrollMode(this.overScrollMode) - .onProgressChange((event) => { - if (event) { - this.progress = event.newProgress - this.onProgressChange() - } - }) - .onScroll((event) => { - if (event) { - this.scroll(event.xOffset, event.yOffset) - } - }) + .onProgressChange((event: OnProgressChangeEvent) => this.onProgressChange(event)) + .onScroll((event: OnScrollEvent) => this.webViewBaseOperate?.emitScroll(event)) .nestedScroll({ scrollForward: this.nestedScroll, scrollBackward: this.nestedScroll, }) - .onPageBegin(() => { - if(this.controller.getUrl() === this.url) { - this.onLoadingStart(); - } - this.onPageBeginInit() - }) - .onPageEnd(() => { - Logger.debug(TAG, "[RNOH] onPageEnd") - this.runInjectedJavaScript() - this.onLoadingFinish() - }) - .onErrorReceive((event) => { - if (event) { - let errorInfo: string = event.error.getErrorInfo(); - let errorCode: number = event.error.getErrorCode(); - if (!event.request.isMainFrame()) { - Logger.debug(TAG, "[RNOH] Not Main Frame Error"); - return; - } - Logger.debug(TAG, "[RNOH] errorInfo:" + errorInfo) - Logger.debug(TAG, "[RNOH] errorCode:" + errorCode) - this.onLoadingError(errorCode, errorInfo) - } - }) - .onHttpErrorReceive((event) => { - if (event) { - let errorInfo: string = event.response.getResponseData(); - let code: number = event.response.getResponseCode() - Logger.debug(TAG, "[RNOH] errorInfo:" + errorInfo) - this.onHttpError(code, errorInfo) - } - }) - .onControllerAttached(() => { - this.controllerAttachedInit() - Logger.debug(TAG, "[RNOH] onControllerAttached") - let baseUrl = this.source.baseUrl - let uri = this.source.uri - if (this.source.html != undefined && this.source.html != "") { - try { - this.controller.loadData( - this.source.html, - "text/html", - "UTF-8", - baseUrl, - " " - ); - } catch (error) { - Logger.error(TAG, "error:" + error) - } - } else if (uri != undefined && uri != "") { - this.controller.loadUrl(uri, this.headers); - } else { - this.controller.loadUrl(uri, this.headers); - } - if (!this.hasRegisterJavaScriptProxy) { - this.registerPostMessage() - } - }) + .onPageBegin(() => this.onPageBegin()) + .onPageEnd(() => this.onPageEnd()) + .onErrorReceive((event: OnErrorReceiveEvent) => this.webViewBaseOperate?.emitLoadingError(event)) + .onHttpErrorReceive((event: OnHttpErrorReceiveEvent) => this.webViewBaseOperate?.emitHttpError(event)) + .onControllerAttached(() => this.controllerAttachedInit()) .onAlert((event: AlertEvent) => this.onJavascriptAlert(event)) .onConfirm((event: AlertEvent) => this.onJavascriptConfirm(event)) } diff --git a/harmony/rn_webview/src/main/ets/WebViewBaseOperate.ets b/harmony/rn_webview/src/main/ets/WebViewBaseOperate.ets index 2aed7f861..b89ebf81e 100644 --- a/harmony/rn_webview/src/main/ets/WebViewBaseOperate.ets +++ b/harmony/rn_webview/src/main/ets/WebViewBaseOperate.ets @@ -85,8 +85,12 @@ export class BaseOperate { } } - emitLoadingError(params: LoadingErrorInterface) { + emitLoadingError(event: OnErrorReceiveEvent) { try { + if (!event.request.isMainFrame()) { + Logger.debug(TAG, "[RNOH] Not Main Frame Error"); + return; + } this.eventEmitter!.emit('loadingError', { url: this.controller.getUrl(), loading: false, @@ -95,15 +99,15 @@ export class BaseOperate { canGoForward: this.controller.accessForward(), lockIdentifier: 0, domain: "", - code: params.code, - description: params.description + code: event.error.getErrorCode(), + description: event.error.getErrorInfo() }) } catch (error) { Logger.error(TAG, `[RNOH] emitLoadingError Errorcode: ${JSON.stringify(error)}`); } } - emitHttpError(params: LoadingErrorInterface) { + emitHttpError(event: OnHttpErrorReceiveEvent) { try { this.eventEmitter!.emit('httpError', { url: this.controller.getUrl(), @@ -112,15 +116,15 @@ export class BaseOperate { canGoBack: this.controller.accessBackward(), canGoForward: this.controller.accessForward(), lockIdentifier: 0, - description: params.description, - statusCode: params.code + description: event.response.getResponseData(), + statusCode: event.response.getResponseCode() }) } catch (error) { Logger.error(TAG, `[RNOH] emitHttpError Errorcode: ${JSON.stringify(error)}`); } } - emitScroll(params: ScrollInterface) { + emitScroll(event: OnScrollEvent) { try { this.eventEmitter!.emit('scroll', { contentInset: { @@ -129,7 +133,7 @@ export class BaseOperate { right: 0, top: 0 }, - contentOffset: { y: params.y, x: params.x }, + contentOffset: { y: event.yOffset, x: event.xOffset }, contentSize: { height: 0, width: 0 }, layoutMeasurement: { height: 0, width: 0 } }) @@ -209,4 +213,8 @@ export class BaseOperate { `[RNOH] setCustomUserAgent ErrorCode: ${error.code}, Message: ${error.message}, userAgent: ${customUserAgent}`); } } + + onErrorReceive(){ + + } }