【问题标题】:Webview is blank / white in Android API 21Android API 21 中的 Webview 为空白/白色
【发布时间】: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);

【问题讨论】:

    标签: android android-studio webview android-webview


    【解决方案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_width="match_parent" 
        android:layout_height="match_parent" 
        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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多