【问题标题】:Loading https getting white screen in android webview in version 2.2在 2.2 版中加载 https 在 android webview 中出现白屏
【发布时间】:2013-01-12 08:32:44
【问题描述】:

我需要在 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 这样便宜的颁发者,则还有一些称为 mid-Certificate 或类似的东西,如果缺少此中间证书则不会在 PC 浏览器上不会出错,但在移动浏览器上会出错,有一种解决方法可以在移动浏览器上打开不受信任的证书,但设置起来真的很复杂
  • @Shehabix 谢谢。你能告诉我们这个错误的解决方法吗?
  • 你有没有试过加载一个普通的http url,看看WebView是否仍然是白色的?
  • @hsigmond 是的常规 http 加载完美。

标签: android android-webview


【解决方案1】:

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

  1. 假设您拥有网站的管理员权限来更改 SSL 证书提供者
  2. 实施类似SSL not working on Android 2.2 (only in 2.3) 的解决方法

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

【讨论】:

    【解决方案2】:

    handler.proceed();应该让 WebView 加载 https url,你有没有尝试加载一个常规的 http url,看看 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" />
    

    【讨论】:

      【解决方案3】:
      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(); 但我不推荐它!因为它破坏了所需的验证。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        相关资源
        最近更新 更多