From 201773350eeff16f2fac003702de56380fdf4e09 Mon Sep 17 00:00:00 2001 From: Gaubee Date: Tue, 28 May 2024 20:14:07 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20[kmp/browser]=20=E4=BF=AE=E5=A4=8DJmm?= =?UTF-8?q?=E6=89=93=E5=BC=80dweb-deeplink=E4=BC=9A=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=9B=BE=E5=B1=82=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../browser/mwebview/MultiWebViewController.kt | 8 +++++++- .../kotlin/org/dweb_browser/dwebview/DWebView.android.kt | 2 +- .../kotlin/org/dweb_browser/dwebview/DWebView.kt | 1 + .../kotlin/org/dweb_browser/dwebview/DWebView.desktop.kt | 1 + .../kotlin/org/dweb_browser/dwebview/DWebView.ios.kt | 1 + 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/next/kmp/browser/src/commonMain/kotlin/org/dweb_browser/browser/mwebview/MultiWebViewController.kt b/next/kmp/browser/src/commonMain/kotlin/org/dweb_browser/browser/mwebview/MultiWebViewController.kt index 62e165f96..008aa3bc6 100644 --- a/next/kmp/browser/src/commonMain/kotlin/org/dweb_browser/browser/mwebview/MultiWebViewController.kt +++ b/next/kmp/browser/src/commonMain/kotlin/org/dweb_browser/browser/mwebview/MultiWebViewController.kt @@ -9,6 +9,7 @@ import kotlinx.serialization.json.JsonPrimitive import org.dweb_browser.browser.common.createDwebView import org.dweb_browser.core.ipc.Ipc import org.dweb_browser.core.module.MicroModule +import org.dweb_browser.core.std.dns.nativeFetch import org.dweb_browser.dwebview.IDWebView import org.dweb_browser.dwebview.base.ViewItem import org.dweb_browser.helper.ChangeableList @@ -95,7 +96,12 @@ class MultiWebViewController( ).also { viewItem -> webViewList.add(viewItem) dWebView.onCreateWindow { - appendWebViewAsItem(it) + val url = it.getUrl() + if (url.startsWith("dweb://")) { + dWebView.remoteMM.nativeFetch(url) + } else { + appendWebViewAsItem(it) + } } dWebView.onDestroy { closeWebView(webviewId) diff --git a/next/kmp/dwebview/src/androidMain/kotlin/org/dweb_browser/dwebview/DWebView.android.kt b/next/kmp/dwebview/src/androidMain/kotlin/org/dweb_browser/dwebview/DWebView.android.kt index 6b46288b7..65ed0c920 100644 --- a/next/kmp/dwebview/src/androidMain/kotlin/org/dweb_browser/dwebview/DWebView.android.kt +++ b/next/kmp/dwebview/src/androidMain/kotlin/org/dweb_browser/dwebview/DWebView.android.kt @@ -93,7 +93,7 @@ class DWebView private constructor(internal val engine: DWebViewEngine, initUrl: } } - + override val remoteMM get() = engine.remoteMM override val ioScope get() = engine.ioScope override suspend fun startLoadUrl(url: String) = withMainContext { engine.loadUrl(url) diff --git a/next/kmp/dwebview/src/commonMain/kotlin/org/dweb_browser/dwebview/DWebView.kt b/next/kmp/dwebview/src/commonMain/kotlin/org/dweb_browser/dwebview/DWebView.kt index 02913cb3b..e131537a7 100644 --- a/next/kmp/dwebview/src/commonMain/kotlin/org/dweb_browser/dwebview/DWebView.kt +++ b/next/kmp/dwebview/src/commonMain/kotlin/org/dweb_browser/dwebview/DWebView.kt @@ -38,6 +38,7 @@ expect suspend fun IDWebView.Companion.create( ): IDWebView abstract class IDWebView(initUrl: String?) { + abstract val remoteMM: MicroModule.Runtime abstract val ioScope: CoroutineScope @Serializable diff --git a/next/kmp/dwebview/src/desktopMain/kotlin/org/dweb_browser/dwebview/DWebView.desktop.kt b/next/kmp/dwebview/src/desktopMain/kotlin/org/dweb_browser/dwebview/DWebView.desktop.kt index b7ccf0026..3907c2dfc 100644 --- a/next/kmp/dwebview/src/desktopMain/kotlin/org/dweb_browser/dwebview/DWebView.desktop.kt +++ b/next/kmp/dwebview/src/desktopMain/kotlin/org/dweb_browser/dwebview/DWebView.desktop.kt @@ -52,6 +52,7 @@ class DWebView( } } + override val remoteMM get() = viewEngine.remoteMM override val ioScope: CoroutineScope get() = viewEngine.ioScope diff --git a/next/kmp/dwebview/src/iosMain/kotlin/org/dweb_browser/dwebview/DWebView.ios.kt b/next/kmp/dwebview/src/iosMain/kotlin/org/dweb_browser/dwebview/DWebView.ios.kt index b0f6dd3e3..cae39ef43 100644 --- a/next/kmp/dwebview/src/iosMain/kotlin/org/dweb_browser/dwebview/DWebView.ios.kt +++ b/next/kmp/dwebview/src/iosMain/kotlin/org/dweb_browser/dwebview/DWebView.ios.kt @@ -103,6 +103,7 @@ class DWebView private constructor( } + override val remoteMM get() = engine.remoteMM private var _engine: DWebViewEngine? = viewEngine internal val engine get() = _engine ?: throw NullPointerException("dwebview already been destroy") private val _engineLazy = RememberLazy(viewEngine) { _engine }