Skip to content

Commit 17def3e

Browse files
committed
refactor(android): streamline WebView creation and configuration logic
1 parent f4f3099 commit 17def3e

File tree

2 files changed

+10
-46
lines changed

2 files changed

+10
-46
lines changed

android/dimina/src/main/kotlin/com/didi/dimina/ui/view/DiminaWebView.kt

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
package com.didi.dimina.ui.view
22

3-
import android.annotation.SuppressLint
4-
import android.content.Context
5-
import android.content.pm.ApplicationInfo
63
import android.webkit.JavascriptInterface
7-
import android.webkit.MimeTypeMap
8-
import android.webkit.WebResourceRequest
9-
import android.webkit.WebResourceResponse
10-
import android.webkit.WebSettings
114
import android.webkit.WebView
12-
import android.webkit.WebViewClient
135
import androidx.compose.foundation.layout.Box
146
import androidx.compose.foundation.layout.fillMaxSize
157
import androidx.compose.runtime.Composable
@@ -19,11 +11,7 @@ import androidx.compose.ui.Modifier
1911
import androidx.compose.ui.platform.LocalContext
2012
import androidx.compose.ui.viewinterop.AndroidView
2113
import com.didi.dimina.common.LogUtils
22-
import com.didi.dimina.common.PathUtils.FILE_PROTOCOL
23-
import com.didi.dimina.common.VersionUtils
2414
import org.json.JSONObject
25-
import java.io.File
26-
import java.io.FileInputStream
2715

2816
/**
2917
* Author: Doslin
@@ -67,7 +55,7 @@ fun DiminaWebView(
6755
// 使用缓存管理器获取WebView实例
6856
WebViewCacheManager.getWebView(context, onPageCompleted, webViewIdentifier)
6957
} else {
70-
// 传统方式创建WebView
58+
// 传统方式创建WebView(使用WebViewCacheManager中的统一配置)
7159
createWebView(context, onPageCompleted)
7260
}
7361

@@ -81,38 +69,6 @@ fun DiminaWebView(
8169
}
8270
}
8371

84-
@SuppressLint("SetJavaScriptEnabled")
85-
private fun createWebView(context: Context, onPageLoadFinished: () -> Unit): WebView {
86-
return WebView(context).apply {
87-
// Ensure WebView has explicit layoutParams.
88-
// Chromium determines viewport size during initial layout.
89-
// Missing layoutParams may cause vh/vw and window.innerHeight to be incorrect.
90-
layoutParams = android.view.ViewGroup.LayoutParams(
91-
android.view.ViewGroup.LayoutParams.MATCH_PARENT,
92-
android.view.ViewGroup.LayoutParams.MATCH_PARENT
93-
)
94-
// 配置 WebView 设置
95-
settings.apply {
96-
javaScriptEnabled = true
97-
domStorageEnabled = true
98-
allowFileAccess = true
99-
allowContentAccess = true
100-
loadWithOverviewMode = true
101-
useWideViewPort = true
102-
cacheMode = WebSettings.LOAD_NO_CACHE
103-
mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
104-
}
105-
106-
if (0 != (context.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE)) {
107-
WebView.setWebContentsDebuggingEnabled(true)
108-
LogUtils.d(TAG, "Chrome remote debugging enabled")
109-
}
110-
111-
// Configure WebViewClient with file interceptor
112-
webViewClient = createWebViewClientWithInterceptor { onPageLoadFinished() }
113-
}
114-
}
115-
11672
/**
11773
* 向渲染线程发送消息
11874
* 这个方法封装了 webview.evaluateJavascript,使其接口与 jscore.postMessage 保持一致

android/dimina/src/main/kotlin/com/didi/dimina/ui/view/WebViewCacheManager.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,8 +594,16 @@ internal fun handleFileInterceptRequest(
594594
return null
595595
}
596596

597+
/**
598+
* 创建配置好的WebView实例
599+
* 此函数统一了WebView的配置逻辑,包括布局参数、JavaScript设置、调试模式等
600+
*
601+
* @param context 上下文对象
602+
* @param onPageLoadFinished 页面加载完成的回调函数
603+
* @return 配置完成的WebView实例
604+
*/
597605
@SuppressLint("SetJavaScriptEnabled")
598-
private fun createWebView(context: Context, onPageLoadFinished: () -> Unit): WebView {
606+
internal fun createWebView(context: Context, onPageLoadFinished: () -> Unit): WebView {
599607
return WebView(context).apply {
600608
// Ensure WebView has explicit layoutParams.
601609
// Chromium determines viewport size during initial layout.

0 commit comments

Comments
 (0)