有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何解决Android WebView中的黑屏问题?

我正在一个WebView内设置一个url https://turnbackhoax.id/。但是WebView只是显示了一个空白页。我已经尝试设置其他URL和那些工作。我学习并寻找了一个类似的问题,但没有任何改变

以下是我的WebView代码:

public class LaporPage extends AppCompatActivity {

    private WebView webV;
    Activity activity;
    private ProgressDialog progDailog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lapor_page);

        activity = this;

        progDailog = ProgressDialog.show(activity, "Loading","Please wait...", true);
        progDailog.setCancelable(false);

        webV = (WebView) findViewById(R.id.web_view);

        webV.getSettings().setDomStorageEnabled(true);
        webV.getSettings().setJavaScriptEnabled(true);
        webV.getSettings().setLoadWithOverviewMode(true);
        webV.getSettings().setUseWideViewPort(true);
        webV.setWebChromeClient(new WebChromeClient());
        webV.setWebViewClient(new WebViewClient(){

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                progDailog.show();
                view.loadUrl(url);
                return true;
            }
            @Override
            public void onPageFinished(WebView view, final String url) {
                progDailog.dismiss();
            }
        });
        webV.loadUrl("https://turnbackhoax.id/");
    }
}

共 (6) 个答案

  1. # 1 楼答案

    其简单而精确的解决方案是启用DomStorage&;setsetJavaScriptCanOpenWindowsAutomatically=true

        WebView webView = findViewById(R.id.webView);        
    
        webView.getSettings().setDomStorageEnabled(true);    // this 
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);  //and this
    

    这将解决问题

    好好享受吧

  2. # 2 楼答案

    在您的清单下添加此权限。xml

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

    使用以下命令:

     wv = (WebView) findViewById(R.id.web_view);
            wv.setInitialScale(1);      //webview page matches the screen size.
            wv.getSettings().setLoadWithOverviewMode(true);
            wv.getSettings().setUseWideViewPort(true);
            wv.getSettings().setJavaScriptEnabled(true);
            wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);    //loads online website when no internet connection.
            wv.loadUrl("https://prajwalwaingankar.wixsite.com/nivala");
    
  3. # 3 楼答案

    您需要在ReceivedSlerror上使用覆盖

    试试这个

    webV.setWebViewClient(new WebViewClient(){
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                progDailog.show();
                view.loadUrl(url);
    
                return true;
            }
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler,
                                           SslError error) {
                handler.proceed();
            }
            @Override
            public void onPageFinished(WebView view, final String url) {
                progDailog.dismiss();
            }
    
        });
    
  4. # 4 楼答案

    创建名为network_security_config.xml的文件

    <network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <debug-overrides>
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
        </debug-overrides>
    </base-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <domain includeSubdomains="true">example.example.com</domain>
        <trust-anchors>
            <certificates src="@raw/mycert" />
            <certificates src="system" />
        </trust-anchors>
    </domain-config>
    

    显然,

    <application ..... 
    android:networkSecurityConfig="@xml/network_security_config"
    
    </application>
    

    并在需要时添加SSL

  5. # 5 楼答案

    我已经检查了URL,它在web视图中抛出了一个SSL握手错误。尽管忽略SSL错误不是一个好的做法,但这将解决您的问题

    webview.setWebViewClient(new WebViewClient(){
    
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error) {
            handler.proceed();
        }
    
    
    });
    
  6. # 6 楼答案

    要根据新的安全策略正确处理SSL证书验证并避免Google拒绝应用程序,请将代码更改为调用SslErrorHandler。继续()只要服务器提供的证书满足您的期望,就调用SslErrorHandler。取消

    webV.setWebViewClient(new  WebViewClient() {
                override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                    webV!!.loadUrl(url)
                    return true
                }
    
                override fun onReceivedSslError(
                    view: WebView, handler: SslErrorHandler,
                    error: SslError
                ) {
                    handler.proceed()
                }
            });