You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Compose WebView加载Odoo页面空白,求正确配置

Android Compose WebView加载Odoo官网空白无报错的解决办法

我使用Android Compose的WebView打开Odoo官网(https://www.odoo.com/)时,页面始终空白,无任何报错或警告,但加载其他页面一切正常。iOS端同款应用可以正常打开该页面,当前代码如下:

class MainActivity : ComponentActivity() {
    @SuppressLint("SetJavaScriptEnabled")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            AndroidView(
                factory = { context ->
                    WebView(context).apply {
                        webViewClient = WebViewClient()
                        settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
                        settings.javaScriptEnabled = true
                        settings.domStorageEnabled = true
                        settings.loadWithOverviewMode = true
                        settings.useWideViewPort = true
                        settings.allowContentAccess = true
                        settings.allowFileAccess = true
                        settings.databaseEnabled = true
                        settings.loadsImagesAutomatically = true
                        settings.javaScriptCanOpenWindowsAutomatically = true
                        settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
                        isScrollbarFadingEnabled = true
                    }
                },
                update = {
                    it.loadUrl("https://www.odoo.com/")
                }
            )
        }
    }
}

修正后的WebView配置方案

针对Odoo官网的加载特性,需要调整以下几个关键配置:

  • 替换WebViewClient为WebChromeClient:Odoo依赖大量JS交互和控制台日志输出,WebChromeClient能更好支持这类特性,还能捕获JS层面的错误日志,方便排查问题。
  • 添加适配性User-Agent:部分网站会根据UA做设备适配,设置接近主流移动端Chrome的UA可以避免被网站拦截或适配异常。
  • 开启第三方Cookie支持:Android 11及以上系统默认限制第三方Cookie,Odoo加载过程中可能依赖第三方资源,需手动开启该权限。
  • 调整缓存策略:设置合理的缓存模式,避免旧缓存导致的加载异常。

完整修正代码

import android.os.Build
import android.util.Log
import android.webkit.*
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.ui.platform.AndroidView

class MainActivity : ComponentActivity() {
    @SuppressLint("SetJavaScriptEnabled")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            AndroidView(
                factory = { context ->
                    WebView(context).apply {
                        // 使用WebChromeClient支持更多JS特性并捕获控制台日志
                        webChromeClient = object : WebChromeClient() {
                            override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
                                Log.d("WebViewDebug", "${consoleMessage.message()} -- 行号: ${consoleMessage.lineNumber()} 来源: ${consoleMessage.sourceId()}")
                                return super.onConsoleMessage(consoleMessage)
                            }
                        }
                        settings.apply {
                            mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
                            javaScriptEnabled = true
                            domStorageEnabled = true
                            loadWithOverviewMode = true
                            useWideViewPort = true
                            allowContentAccess = true
                            allowFileAccess = true
                            databaseEnabled = true
                            loadsImagesAutomatically = true
                            javaScriptCanOpenWindowsAutomatically = true
                            layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
                            // 设置适配移动端Chrome的User-Agent
                            userAgentString = "Mozilla/5.0 (Linux; Android 13; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36"
                            // Android 11+ 开启第三方Cookie支持
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                                setAppCacheEnabled(true)
                                CookieManager.getInstance().setAcceptThirdPartyCookies(this@apply, true)
                            }
                            // 设置默认缓存模式,避免缓存异常
                            cacheMode = WebSettings.LOAD_DEFAULT
                        }
                        isScrollbarFadingEnabled = true
                    }
                },
                update = {
                    it.loadUrl("https://www.odoo.com/")
                }
            )
        }
    }
}

额外注意事项

确保在AndroidManifest.xml中添加必要的网络权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

内容的提问来源于stack exchange,提问作者Saher Al-Sous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:30:18