在Android版本2.2中,使用WebView加载https会出现白屏问题。

3
我需要在Android WebView中加载一个https的URL,但是它只显示白屏。
我已经处理了public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error),但是在加载URL时还是只显示白屏,但是在logcat中没有任何异常。
以下是我的代码:
public class MainActivity extends Activity { 
private static final String URL = "https://someurl";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WebView myWebView = (WebView)findViewById(R.id.webview);

    WebSettings settings = myWebView.getSettings();

    settings.setJavaScriptEnabled(true);

    settings.setDomStorageEnabled(true);

    myWebView.loadUrl(URL);



    myWebView.setWebViewClient(new MyWebViewClient());


}


private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().equals(URL)) {

            return false;
        }
        Activity that handles URLs
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }

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


        handler.proceed();
    }
}

期待您的回复。

谢谢。


您需要一个经过验证和信任的SSL证书,同时请注意,如果您的SSL发行者是像GoDaddy这样的廉价发行者,则会有所谓的中间证书或类似的东西。如果缺少此中间证书,则PC浏览器不会出现错误,但移动浏览器会出现错误。对于在移动浏览器上打开不受信任的证书,有一种解决方法,但设置起来非常复杂。 - Shehabic
@Shehabix 谢谢。你能告诉我们如何解决这个错误吗? - Mukunda
你尝试过加载常规的HTTP URL吗?看看WebView是否仍然是白色的? - TouchBoarder
@hsigmond 是的,常规的HTTP可以正常加载。 - Mukunda
3个回答

1

handler.proceed(); 应该使WebView加载https网址,您是否尝试过加载常规http网址,并查看WebView是否仍然是白色的。

Android中存在一个错误,有时会导致WebView变成白色。

尝试在WebView上禁用硬件加速,在.xml布局资源中为webview设置android:layerType="software"属性。

<WebView
    android:id="@+id/webviev"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:layerType="software" />

1

在Android 2.2中不支持某些SSL证书,您可以尝试并检查在本地浏览器中加载它,如果在浏览器中工作,则可能受到支持。如果不支持,则您至少有以下两个选项

  1. 更改SSL证书提供程序(假设您具有网站的管理员权限)
  2. 实施解决方法,例如SSL not working on Android 2.2 (only in 2.3)

请检查其他Android版本是否也支持SSL。


0
mWebview.setWebViewClient(new WebViewClient() {


        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            super.onReceivedSslError(view, handler, error);
           //Error happens here and returns an empty page.
        }

在2.3设备上,存在证书验证问题。 它可能是有效的,但当顺序不正确时,会失败。

你可以调用handler.proceed(); 但我不建议这样做!因为它会破坏必需的验证。


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