Android WebView无法加载HTTPS URL。

109
public void onCreate(Bundle savedInstance)
{       
    super.onCreate(savedInstance);
    setContentView(R.layout.show_voucher);
    webView=(WebView)findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setBuiltInZoomControls(true);
    String url ="https://www.paymeon.com/Vouchers/?v=%C80%8D%B1x%D9%CFqh%FA%84%C35%0A%1F%CE&iv=%25%EE%BEi%F4%DAT%E1"
    //webView.loadUrl(url); // Not Working... Showing blank
    webView.loadUrl("http://www.yahoo.com"); // its working    
}
当我尝试在WebBView中加载一个URL时,它只显示一个空白屏幕。如果我加载Google.com或yahoo.com的话就正常工作。

1
现在它正在工作,我已经检查过了。如果还不行,请再次检查,然后将以下代码添加到您的代码中:webView.getSettings().setUseWideViewPort(true); webView.getSettings().setLoadWithOverviewMode(true); - ilango j
17个回答

2
我的网站是一个子域名,它是基于Angular 8开发的,同时使用本地存储和cookie。在设置以下行之后,网站会显示,并提供其他上述解决方案。
webSettings.setDomStorageEnabled(true);

2
在清单文件的应用程序标签中添加android:usesCleartextTraffic="true",一切都会正常工作。这对我有效。

1
似乎是一条注释 - StupidWolf

2

推荐的方法是:

1. 不要调用super方法(从重写的方法中删除super调用)

2. Google建议如果出现任何错误,调用SslErrorHandler.cancel()方法

3. 不要提示对话框以暴露SSL错误

最好的解决方案是什么?? 移除此覆盖方法

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error) {

}

你是在寻求解决方案还是提出建议? - Dharman
我建议采用这种方法。 - John Ruban Singh
@JohnRubanSingh 嗨John,我正在从资产中加载JS文件,一旦文件在onPageFinished中加载完成,我就会调用JS内部的一个函数。 所以,是否需要覆盖onReceivedSslError()?因为我正在使用webview.setWebViewClient(new ....)吗? - Shivam Sharma
这段代码拒绝我的APK。即使9个月以来,这段代码从未导致拒绝,但现在突然面临拒绝。switch (error.getPrimaryError()) { case SslError.SSL_UNTRUSTED: handler.proceed(); break; case SslError.SSL_EXPIRED: case SslError.SSL_IDMISMATCH: case SslError.SSL_NOTYETVALID: case SslError.SSL_DATE_INVALID: case SslError.SSL_INVALID: default: handler.cancel(); break; } - Shivam Sharma
@JohnRubanSingh,请帮帮我。我们可以在 Slack 上联络。 - Shivam Sharma

1
在您的Java代码中使用以下代码:webview.getSettings().setDomStorageEnabled(true)
WebView webView = (WebView) findViewById(R.id.webview);    
webView.getSettings().setDomStorageEnabled(true);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.loadUrl(yourUrl);

0
似乎SSL错误和Google安全问题可以通过在Sketchware和Android Studio中使用以下代码解决。
webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); // 添加这一行 webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webView.setWebViewClient(new WebViewClient(){ @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // 不要调用父类的方法 super.onReceivedSslError(view, handler, error); } });

0

请检查您的用户代理,如果它太长,您应该会收到此错误。


这并没有回答问题,更适合作为评论。 - cursorrux

0
设置这两个属性就足以让它对我有用,而且不会暴露安全问题:
 WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setDomStorageEnabled(true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接