在2.2版的android webview中加载https获取白屏

时间:2013-01-12 08:32:45

标签: android android-webview

我需要在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();
    }
}

}

期待您的回复。

感谢

3 个答案:

答案 0 :(得分: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 :(得分:1)

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

  1. 如果您拥有网站的管理员权限,则更改SSL证书提供商
  2. 实施类似SSL not working on Android 2.2 (only in 2.3)
  3. 的解决方案

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

答案 2 :(得分: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(); 但我不推荐它!因为它打破了必要的验证。