Skip to content

Commit c972ab6

Browse files
committed
Enhance error handling and add support for retrieving page title and URL
1 parent 67ae972 commit c972ab6

4 files changed

Lines changed: 31 additions & 16 deletions

File tree

webview-compose/src/wasmJsMain/kotlin/io/github/kdroidfilter/webview/web/JsInterop.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
@file:OptIn(ExperimentalWasmJsInterop::class)
2+
23
package io.github.kdroidfilter.webview.web
34

45
import org.w3c.dom.Element
@@ -12,11 +13,7 @@ fun evaluateScriptJs(
1213
): String = js(
1314
//language=javascript
1415
"""{
15-
try {
16-
return element.contentWindow && element.contentWindow.eval ? String(element.contentWindow.eval(script)) : '';
17-
} catch (err) {
18-
return 'Error: ' + err.message;
19-
}
16+
return element.contentWindow && element.contentWindow.eval ? String(element.contentWindow.eval(script)) : '';
2017
}"""
2118
)
2219

webview-compose/src/wasmJsMain/kotlin/io/github/kdroidfilter/webview/web/WasmJsWebView.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,8 @@ class WasmJsWebView(
186186
try {
187187
val result = evaluateScriptJs(element, script)
188188
callback?.invoke(result)
189-
} catch (e: Exception) {
190-
callback?.invoke("Error: ${e.message}")
189+
} catch (t: Throwable) {
190+
callback?.invoke("Error: ${t.message}")
191191
}
192192
}
193193
}

webview-compose/src/wasmJsMain/kotlin/io/github/kdroidfilter/webview/web/WasmJsWebViewNavigator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ class HtmlViewNavigator(
4141
try {
4242
val result = evaluateScriptJs(element, event.script)
4343
event.callback?.invoke(result)
44-
} catch (e: Exception) {
45-
event.callback?.invoke("Error: ${e.message}")
44+
} catch (t: Throwable) {
45+
event.callback?.invoke("Error: ${t.message}")
4646
}
4747
}
4848
is NavigationEvent.StopLoading -> element.contentWindow?.stop()

webview-compose/src/wasmJsMain/kotlin/io/github/kdroidfilter/webview/web/WebView.wasmJs.kt

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,7 @@
22

33
package io.github.kdroidfilter.webview.web
44

5-
import androidx.compose.runtime.Composable
6-
import androidx.compose.runtime.LaunchedEffect
7-
import androidx.compose.runtime.mutableStateOf
8-
import androidx.compose.runtime.remember
9-
import androidx.compose.runtime.rememberCoroutineScope
10-
import androidx.compose.runtime.snapshotFlow
5+
import androidx.compose.runtime.*
116
import androidx.compose.ui.Modifier
127
import io.github.kdroidfilter.webview.jsbridge.JsMessage
138
import io.github.kdroidfilter.webview.jsbridge.WebViewJsBridge
@@ -181,7 +176,30 @@ actual fun ActualWebView(
181176
}
182177
}
183178
}
184-
is HtmlLoadingState.Finished -> state.loadingState = LoadingState.Finished
179+
180+
is HtmlLoadingState.Finished -> {
181+
state.loadingState = LoadingState.Finished
182+
state.webView?.nativeWebView?.element?.let { element ->
183+
try {
184+
state.pageTitle = evaluateScriptJs(
185+
element,
186+
"document.title"
187+
)
188+
state.lastLoadedUrl = evaluateScriptJs(
189+
element,
190+
"document.location"
191+
)
192+
} catch (t: Throwable) {
193+
KLogger.e(
194+
t = t,
195+
tag = "ActualWebView"
196+
) {
197+
"Error getting document from iframe: ${t.message}"
198+
}
199+
}
200+
}
201+
}
202+
185203
is HtmlLoadingState.Initializing -> state.loadingState = LoadingState.Initializing
186204
}
187205
}

0 commit comments

Comments
 (0)