diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/build-profile.json5 b/packages/webview_flutter/webview_flutter_ohos/ohos/build-profile.json5 index 15f1545a96f8acf7220aef23663c047205c86960..c7c8fb53cee811cbae5ba22f1638be6814045fbc 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/build-profile.json5 +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/build-profile.json5 @@ -20,8 +20,8 @@ { "name": "default", "signingConfig": "default", - "compileSdkVersion": "4.0.0(10)", - "compatibleSdkVersion": "4.0.0(10)", + "compileSdkVersion": "4.1.0(11)", + "compatibleSdkVersion": "4.1.0(11)", "runtimeOS": "HarmonyOS", } ], diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/DownloadListenerFlutterApiImpl.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/DownloadListenerFlutterApiImpl.ets index 559355dfa487825fdda3bf3a05dcbcf2c897c75f..cc2ed9f583603a7ddf0e6d440d006ed588239a9c 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/DownloadListenerFlutterApiImpl.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/DownloadListenerFlutterApiImpl.ets @@ -54,5 +54,5 @@ export class DownloadListenerFlutterApiImpl extends DownloadListenerFlutterApi { } export interface DownloadListener { - onDownloadStart(url: string, userAgent: string, contentDisposition: string, mimeType: string, contentLength: number); + onDownloadStart(url: string, userAgent: string, contentDisposition: string, mimeType: string, contentLength: number) : void; } diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/DownloadListenerHostApiImpl.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/DownloadListenerHostApiImpl.ets index 4e9fb706e1289af3de969c8e3f3435c46675487c..83473e9ff8907d43c336373880186fc26f6bbd35 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/DownloadListenerHostApiImpl.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/DownloadListenerHostApiImpl.ets @@ -66,5 +66,5 @@ class DownloadListenerImpl implements DownloadListener { } export interface DownloadListener { - onDownloadStart(url: string, userAgent: string, contentDisposition: string, mimeType: string, contentLength: number); + onDownloadStart(url: string, userAgent: string, contentDisposition: string, mimeType: string, contentLength: number) : void; } diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/GeneratedOhosWebView.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/GeneratedOhosWebView.ets index bef6cdf78f9e6fb9383fe4cdd3cbc280fa7c64bb..2406832607e287247c13a492912b86bcc3864275 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/GeneratedOhosWebView.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/GeneratedOhosWebView.ets @@ -1106,7 +1106,7 @@ export interface Reply { * * @param reply the reply, possibly null. */ - reply: (reply: T) => void; + reply: (reply: T |null) => void; } export class WebViewFlutterApi { diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/OhosWebView.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/OhosWebView.ets index c38e9df9d8aa4f0f96ecef5e2809e97477dc25d4..20631a8b75f7e0a62ef1b86c18bf2bc29ae5eb9a 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/OhosWebView.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/OhosWebView.ets @@ -61,7 +61,7 @@ export struct OhosWebView { }) dialogController.open(); event.handler.setWebController(newWebViewController); - }) + }).onControllerAttached(DynamicUtils.getParams(this.params, "onControllerAttached")) } } } diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebChromeClientHostApiImpl.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebChromeClientHostApiImpl.ets index 4ffd5198783b31d5ad9f0b3ca414e4e9b3ec0bf7..0e0ab245a83f1bc24bb5eb569980f4b3dc2549da 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebChromeClientHostApiImpl.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebChromeClientHostApiImpl.ets @@ -26,21 +26,21 @@ import web_webview from '@ohos.web.webview' const TAG: string = "WebChromeClientHostApiImpl"; export interface WebChromeClient { - onProgressChanged(view: WebViewPlatformView, progress: number); + onProgressChanged(view: WebViewPlatformView, progress: number) : void; - onGeolocationPermissionsShowPrompt(origin: string, callback: JsGeolocation); + onGeolocationPermissionsShowPrompt(origin: string, callback: JsGeolocation) : void; - onGeolocationPermissionsHidePrompt(); + onGeolocationPermissionsHidePrompt() : void; onShowFileChooser( webView: WebViewPlatformView, filePathCallback: FileSelectorResult, fileChooserParams: FileSelectorParam ): boolean; - onPermissionRequest(request: PermissionRequest); + onPermissionRequest(request: PermissionRequest) : void; - onConsoleMessage(message: ConsoleMessage); + onConsoleMessage(message: ConsoleMessage) : void; - onCreateWindow(webView: WebViewPlatformView, isDialog: boolean, isUserGesture: boolean, handler: ControllerHandler); + onCreateWindow(webView: WebViewPlatformView, isDialog: boolean, isUserGesture: boolean, handler: ControllerHandler) : void; } export class WebChromeClientHostApiImpl extends WebChromeClientHostApi { @@ -171,7 +171,7 @@ class WebChromeClientImpl extends SecureWebChromeClient { let currentReturnValueForOnShowFileChooser: boolean = this.returnValueForOnShowFileChooser; this.flutterApi.onShowFileChooserImpl( this, webView, fileChooserParams, { - reply: (reply: Array) => { + reply: (reply: Array | null) => { if (currentReturnValueForOnShowFileChooser) { filePathCallback.handleFileList(reply); } diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebSettingsHostApiImpl.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebSettingsHostApiImpl.ets index 34fc45bdebc0e754afa1e7dda2072216877c5c9c..4728e5a2678ad4405e50b48c2cc2ae6abc4b5056 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebSettingsHostApiImpl.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebSettingsHostApiImpl.ets @@ -18,31 +18,31 @@ import { InstanceManager } from './InstanceManager'; import { WebViewPlatformView } from './WebViewHostApiImpl'; export interface WebSettings { - setDomStorageEnabled(flag: boolean); + setDomStorageEnabled(flag: boolean) : void; - setJavaScriptCanOpenWindowsAutomatically(flag: boolean); + setJavaScriptCanOpenWindowsAutomatically(flag: boolean) : void; - setSupportMultipleWindows(support: boolean); + setSupportMultipleWindows(support: boolean) : void; - setJavaScriptEnabled(flag: boolean); + setJavaScriptEnabled(flag: boolean) : void; - setUserAgentString(userAgentString: string); + setUserAgentString(userAgentString: string) : void; - setMediaPlaybackRequiresUserGesture(require: boolean); + setMediaPlaybackRequiresUserGesture(require: boolean) : void; - setSupportZoom(support: boolean); + setSupportZoom(support: boolean) : void; - setLoadWithOverviewMode(overview: boolean); + setLoadWithOverviewMode(overview: boolean) : void; - setUseWideViewPort(use: boolean); + setUseWideViewPort(use: boolean) : void; - setDisplayZoomControls(enabled: boolean); + setDisplayZoomControls(enabled: boolean) : void; - setBuiltInZoomControls(enabled: boolean); + setBuiltInZoomControls(enabled: boolean) : void; - setAllowFileAccess(enabled: boolean); + setAllowFileAccess(enabled: boolean) : void; - setTextZoom(textZoom: number); + setTextZoom(textZoom: number) : void; } export class WebSettingsCreator { diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewClientHostApiImpl.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewClientHostApiImpl.ets index e15f25a4537707d0ba1d7c9abf8f3b1293b0c948..1b92e74931684d45feb6ce49b630569cc9314da4 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewClientHostApiImpl.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewClientHostApiImpl.ets @@ -19,15 +19,15 @@ import { WebViewClientFlutterApiImpl } from './WebViewClientFlutterApiImpl'; import { WebViewPlatformView } from './WebViewHostApiImpl'; export interface WebViewClient { - onPageStarted(view: WebViewPlatformView, url: string); + onPageStarted(view: WebViewPlatformView, url: string) : void; - onPageFinished(view: WebViewPlatformView, url: string); + onPageFinished(view: WebViewPlatformView, url: string) : void; - onReceivedError(view: WebViewPlatformView, request: WebResourceRequest, error: WebResourceError); + onReceivedError(view: WebViewPlatformView, request: WebResourceRequest, error: WebResourceError) : void; shouldOverrideUrlLoading(view: WebViewPlatformView, request: WebResourceRequest): boolean; - doUpdateVisitedHistory(view: WebViewPlatformView, url: string, isReload: boolean); + doUpdateVisitedHistory(view: WebViewPlatformView, url: string, isReload: boolean) : void; } export class WebViewClientImpl implements WebViewClient { diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewHostApiImpl.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewHostApiImpl.ets index 07fa1d4598976295a104f19a0dcd93b6410cb62a..4259b5d18f040ddb77901844361bfacce74c3b41 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewHostApiImpl.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewHostApiImpl.ets @@ -82,14 +82,17 @@ export class WebViewHostApiImpl extends WebViewHostApi { loadUrl(instanceId: number, url: string, headers: Map): void { const webView: WebViewPlatformView = this.instanceManager.getInstance(instanceId); - try { - if (url.startsWith("resources/rawfile/")) { - webView.getController().loadUrl($rawfile(url.replace("resources/rawfile/","")), this.toWebHeaders(headers)); - }else { - webView.getController().loadUrl(url, this.toWebHeaders(headers)); + if (webView.getIsControllerAttached()) { + try { + if (url.startsWith("resources/rawfile/")) { + webView.getController().loadUrl($rawfile(url.replace("resources/rawfile/","")), this.toWebHeaders(headers)); + }else { + webView.getController().loadUrl(url, this.toWebHeaders(headers)); + } + } catch (err) { + Log.e(TAG, "loadUrl err = " + err); } - } catch (err) { - Log.e(TAG, "loadUrl err = " + err); + } else { setTimeout( () => { this.loadUrl(instanceId, url, headers); @@ -278,6 +281,16 @@ export class WebViewPlatformView extends PlatformView { private returnValueForShouldOverrideUrlLoading: boolean = false; + private isControllerAttached: boolean = false; + + getIsControllerAttached(): boolean { + return this.isControllerAttached; + } + + private onControllerAttached = () => { + this.isControllerAttached = true; + } + private onDownloadStart = (event: ESObject) => { if (this.downloadListener) { this.downloadListener.onDownloadStart( @@ -390,7 +403,8 @@ export class WebViewPlatformView extends PlatformView { onPermissionRequest: this.onPermissionRequest, onWindowNew: this.onWindowNew, onWindowExit: this.onWindowExit, - onScroll: this.onScroll + onScroll: this.onScroll, + onControllerAttached: this.onControllerAttached }, {}, buildOhosWebView