2

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

}

期待你的答复。

谢谢

4

3 回答 3

1

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" />
于 2013-01-12T08:46:24.697 回答
1

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

  1. 假设您拥有网站的管理员权限,则更改 SSL 证书提供商
  2. 实现类似SSL 的解决方法在 Android 2.2 上不起作用(仅在 2.3 中)

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

于 2013-01-12T08:47:40.250 回答
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(); 但我不推荐它!因为它破坏了所需的验证。

于 2014-04-17T15:40:44.047 回答