From 6da62dc6002f2eb943d5af0d3b1ffc26cda6af60 Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Fri, 29 May 2026 09:50:46 +0800 Subject: [PATCH] feat(sdk-webview): make JS bridge name configurable; default to XWebViewBridge - Add `jsBridgeName` field to `XWebViewConfig` (default: "XWebViewBridge") - Make `DIALOG_OVERRIDE_JS` a function parameterised by bridge name - Use `config.jsBridgeName` in both `XWebViewView` and `XWebViewActivity` - Bump sdk-webview to 1.0.7 Co-Authored-By: Claude Sonnet 4.6 --- gradle.properties | 2 +- .../main/java/com/xuqm/sdk/webview/XWebViewActivity.kt | 2 +- .../main/java/com/xuqm/sdk/webview/XWebViewTypes.kt | 1 + .../src/main/java/com/xuqm/sdk/webview/XWebViewView.kt | 10 +++++----- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index d65ac60..71f7c00 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,5 +7,5 @@ SDK_CORE_VERSION=1.0.6 SDK_IM_VERSION=1.0.5 SDK_PUSH_VERSION=1.0.5 SDK_UPDATE_VERSION=1.0.6 -SDK_WEBVIEW_VERSION=1.0.5 +SDK_WEBVIEW_VERSION=1.0.7 SDK_LICENSE_VERSION=1.0.6 diff --git a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewActivity.kt b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewActivity.kt index fb0b0e9..a65b778 100644 --- a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewActivity.kt +++ b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewActivity.kt @@ -100,7 +100,7 @@ class XWebViewActivity : ComponentActivity() { addJavascriptInterface( XWebViewJsBridge(mainHandler) { config.onMessage }, - "ReactNativeWebView", + config.jsBridgeName, ) webViewClient = object : WebViewClient() { diff --git a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewTypes.kt b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewTypes.kt index 7d2affa..5e1bd04 100644 --- a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewTypes.kt +++ b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewTypes.kt @@ -7,6 +7,7 @@ data class XWebViewConfig( val hideStatusBar: Boolean = false, val userAgent: String? = null, val injectedJavaScript: String? = null, + val jsBridgeName: String = "XWebViewBridge", val onMessage: ((String) -> Unit)? = null, ) diff --git a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt index 12dd8ad..5c5de60 100644 --- a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt +++ b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt @@ -35,11 +35,11 @@ import java.io.File import java.util.Locale // JS injected into every page to bridge dialog APIs and download interception. -// Uses addJavascriptInterface("ReactNativeWebView") for the JS→Native channel. -internal val DIALOG_OVERRIDE_JS = """ +// Uses addJavascriptInterface(jsBridgeName) for the JS→Native channel. +internal fun buildDialogOverrideJs(bridgeName: String) = """ (function() { function post(obj) { - window.ReactNativeWebView.postMessage(JSON.stringify(obj)); + window.$bridgeName.postMessage(JSON.stringify(obj)); } window.alert = function(msg) { post({ __xwv: 'alert', msg: String(msg) }); }; @@ -108,7 +108,7 @@ true; """.trimIndent() internal fun buildInjectedJs(config: XWebViewConfig): String = - DIALOG_OVERRIDE_JS + "\n" + (config.injectedJavaScript ?: "") + "\ntrue;" + buildDialogOverrideJs(config.jsBridgeName) + "\n" + (config.injectedJavaScript ?: "") + "\ntrue;" internal fun shouldLoadInWebView(uri: Uri): Boolean { val scheme = uri.scheme?.lowercase(Locale.ROOT) ?: return true @@ -230,7 +230,7 @@ fun XWebViewView( // JS → Native bridge. Must be added before loadUrl. addJavascriptInterface( XWebViewJsBridge(mainHandler) { onMessageRef.value }, - "ReactNativeWebView", + config.jsBridgeName, ) webViewClient = object : WebViewClient() {