From aeeba4fac882c4512a1ee5087537dbc92f318461 Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Thu, 18 Jun 2026 13:43:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(webview):=20=E6=B7=BB=E5=8A=A0=20onPageErr?= =?UTF-8?q?or=20=E5=9B=9E=E8=B0=83=EF=BC=8C=E6=94=AF=E6=8C=81=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=8A=A0=E8=BD=BD=E5=A4=B1=E8=B4=A5=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - XWebViewConfig 新增 onPageError(errorCode, description, failingUrl) 回调 - WebViewClient.onReceivedError 捕获主框架加载错误并回调 - App 层可据此显示重试 UI --- .../main/java/com/xuqm/sdk/webview/XWebViewTypes.kt | 2 ++ .../main/java/com/xuqm/sdk/webview/XWebViewView.kt | 13 +++++++++++++ 2 files changed, 15 insertions(+) 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 e46bfe4..c4b9ba3 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 @@ -16,6 +16,8 @@ data class XWebViewConfig( /** When non-null, shows a status-bar progress notification with this title while downloading. */ val downloadNotificationTitle: String? = null, val onMessage: ((String) -> Unit)? = null, + /** 页面加载失败时回调。errorCode / description / failingUrl 对应 WebViewClient.onReceivedError 参数。 */ + val onPageError: ((errorCode: Int, description: String, failingUrl: String) -> Unit)? = null, ) interface XWebViewController { 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 f2ecb66..a2c321f 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 @@ -16,6 +16,7 @@ import android.webkit.MimeTypeMap import android.webkit.PermissionRequest import android.webkit.ValueCallback import android.webkit.WebChromeClient +import android.webkit.WebResourceError import android.webkit.WebResourceRequest import android.webkit.WebViewClient import android.webkit.WebView @@ -532,6 +533,18 @@ fun XWebViewView( openExternalScheme(ctx, uri) return true } + + override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) { + super.onReceivedError(view, request, error) + // 仅处理主框架加载错误(忽略子资源如图片、JS 等) + if (request?.isForMainFrame == true) { + val code = error?.errorCode ?: -1 + val desc = error?.description?.toString() ?: "Unknown error" + val url = request.url?.toString() ?: "" + android.util.Log.e("XWV", "onReceivedError: code=$code, desc=$desc, url=$url") + mainHandler.post { config.onPageError?.invoke(code, desc, url) } + } + } } webChromeClient = object : WebChromeClient() {