Android API 21 中的 Webview 为空白/白色

Posted

技术标签:

【中文标题】Android API 21 中的 Webview 为空白/白色【英文标题】:Webview is blank / white in Android API 21 【发布时间】:2021-10-25 20:38:31 【问题描述】:

我正在制作一个以 webview 作为主要内容的应用程序,但是当我在 API 21 (android 5.0) 中运行应用程序时,活动是空白的,但在 API 30 中,webview 会加载网络

这是我的代码,以防出现问题

webClient =findViewById(R.id.WebView);
        WebSettings settings = webClient.getSettings();
        settings.setjavascriptEnabled(true);
        settings.setAllowContentAccess(true);
        settings.setDomStorageEnabled(true);
        webClient.setWebViewClient(new WebViewClient() 
            public boolean shouldOverrideUrlLoading(WebView view, String url)
                view.loadUrl(url);
                return false;
            
        );
        webClient.loadUrl(url);

【问题讨论】:

【参考方案1】:

我认为如果您编辑一些代码就可以了。看看我在下面的情况下是如何做到的。用这种方式给你试试..

选项 1:

用于显示网页

webView = findViewById(R.id.webview);

            String url = "https://android.com/" ; //Enter your url here 
            Log.i(TAG, "checkConnection: Url > " + url);
            webView.loadUrl(url);

            WebSettings webSettings = webView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webView.getSettings().setLoadsImagesAutomatically(true);
            webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
            webView.setWebViewClient(new WebViewClient());
            webView.setWebViewClient(new Browser_Home());
            webView.setWebChromeClient(new ChromeClient());
            webSettings.setAllowFileAccess(true);
            webSettings.setAppCacheEnabled(true);

需要在 shouldOverrideUrlLoading 方法中返回 true

public boolean shouldOverrideUrlLoading(WebView view, String url) 
            view.loadUrl(url);
            return true;
        

选项 2:

可能是硬件加速的原因

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
    webSettings.setMixedContentMode(0);
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
 else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
 else 
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

xml文件

<WebView 
    android:id="@+id/webview" 
    android:layout_ 
    android:layout_ 
    android:layerType="software"/>

Android 清单

android:hardwareAccelerated="true"

更多详情请参考this链接。

【讨论】:

当你输入你的代码时,我得到了与前一个相同的错误,一切都是空白的,调试器说这个I / chromium: [INFO: CONSOLE (1)]" Uncaught TypeError: Object.entries is not a function ", source: http://daikigei.steppehost.tk/assets/bundle.03602209.js (1) 我产生了同样的问题,并且 option2 在我的应用程序中工作。请添加您的错误代码的更多详细信息 这里我把结构留给大家理解pastebin.com/DNa8X1EL

以上是关于Android API 21 中的 Webview 为空白/白色的主要内容,如果未能解决你的问题,请参考以下文章

Android WebView 详解

webview之总结2

多进程中的 Android Pie (9.0) WebView

Android 关于WebView全方面的使用

Android 关于WebView全方面的使用

在 android 中使用 okhttp 在 webview 中的每个请求中发送授权标头