@@ -3,14 +3,16 @@ package io.github.kdroidfilter.webview.web
33
44import androidx.compose.runtime.*
55import androidx.compose.ui.Modifier
6- import io.github.kdroidfilter.webview.jsbridge.JsMessage
76import io.github.kdroidfilter.webview.jsbridge.WebViewJsBridge
7+ import io.github.kdroidfilter.webview.jsbridge.parseJsMessage
88import io.github.kdroidfilter.webview.setting.WebSettings
99import io.github.kdroidfilter.webview.util.KLogger
1010import kotlinx.browser.document
1111import kotlinx.coroutines.launch
1212import org.w3c.dom.HTMLIFrameElement
13+ import org.w3c.dom.MessageEvent
1314import org.w3c.dom.Node
15+ import org.w3c.dom.events.Event
1416
1517/* *
1618 * Platform-specific parameters for the WebView factory in WebAssembly/JavaScript.
@@ -275,37 +277,18 @@ private fun setupJsBridgeForWasm(
275277 webViewJsBridge : WebViewJsBridge ,
276278 webViewWrapper : WasmJsWebView
277279): () -> Unit {
278- val messageHandler: (org.w3c.dom.events. Event ) -> Unit = { event ->
279- val messageEvent = event as org.w3c.dom. MessageEvent
280+ val messageHandler: (Event ) -> Unit = { event ->
281+ val messageEvent = event as MessageEvent
280282
281- if (messageEvent.source == element.contentWindow && messageEvent.data != null ) {
283+ if (
284+ messageEvent.source == element.contentWindow &&
285+ messageEvent.data != null
286+ ) {
282287 try {
283- val dataString = messageEvent.data.toString()
284-
285- if (dataString.contains(webViewJsBridge.jsBridgeName) && dataString.startsWith(" {" )) {
286- val actionPattern = """ "action"\s*:\s*"([^"]*)"""" .toRegex()
287- val paramsPattern = """ "params"\s*:\s*"((?:[^"\\]|\\.)*)"""" .toRegex()
288- val callbackPattern = """ "callbackId"\s*:\s*(\d+)""" .toRegex()
289-
290- val actionMatch = actionPattern.find(dataString)
291- val paramsMatch = paramsPattern.find(dataString)
292- val callbackMatch = callbackPattern.find(dataString)
293-
294- if (actionMatch != null ) {
295- val action = actionMatch.groupValues[1 ]
296- val rawParams = paramsMatch?.groupValues?.get(1 ) ? : " {}"
297- val params = rawParams.replace(" \\\" " , " \" " ).replace(" \\\\ " , " \\ " )
298- val callbackId = callbackMatch?.groupValues?.get(1 )?.toIntOrNull() ? : 0
299-
300- val jsMessage = JsMessage (
301- callbackId = callbackId,
302- methodName = action,
303- params = params,
304- )
305-
306- webViewJsBridge.dispatch(jsMessage)
307- }
308- }
288+ parseJsMessage(
289+ raw = messageEvent.data.toString(),
290+ expectedType = webViewJsBridge.jsBridgeName,
291+ )?.let (webViewJsBridge::dispatch)
309292 } catch (e: Exception ) {
310293 KLogger .e(
311294 t = e,
0 commit comments