Android WebView显示空白页面

42

我正在开发一个Android应用程序,使用运行在Android 2.3.3上的模拟器,在嵌套在线性布局(垂直)中的帧布局中嵌入了WebView。无论我使用什么代码,它似乎都没有实际作用。我已经将Android应用程序的权限设置为INTERNET。即使尝试加载HTML代码,我也只会得到一个空白的白色页面,没有错误,也没有任何提示信息。Logcat中也没有任何东西。

WebView wview = (WebView)findViewById(R.id.webView1);
wview.getSettings().setJavaScriptEnabled(true);

我已经尝试了这三种方法,试图将任何内容加载到 webview 中:

wview.loadUrl("http://www.google.com");
wview.loadData("<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8");
wview.loadDataWithBaseURL(null, "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8",null);

所有三个都给我相同的结果。什么都没有。

有任何想法吗?

16个回答

81
WebSettings settings = wbView.getSettings();
settings.setDomStorageEnabled(true);

2
这对我来说是个问题。Webview能够显示一些网页,但对于其他一些页面则是空白屏幕。添加这个解决了我的问题,谢谢! - androidseb
10
我必须同时使用这两个代码:thiswbView.getSettings().setJavaScriptEnabled(true); - Matthew Read
1
节省我的时间...谢谢。 - varotariya vajsi
1
让我开心了!谢谢你! - Itoun
有人能解释一下为什么吗? - alizeyn
显示剩余2条评论

14

虽然可能有点晚了,但我想分享我的经验,因为我曾经遇到过同样的问题,花了很多时间解决。

将你的WebView放在RelativeLayout中,而不是FrameLayout中。

我测试过:每次都会调用我的WebViewonPageFinished(),但屏幕上却显示空白页。

chrome://inspect WebView调试器中,我可以通过点击inspect按钮来“ping”我的WebView,之后WebView就立即刷新了。

我的想法是-WebViewFrameLayout中没有正确渲染,而RelativeLayout可以解决这个问题(即使调用invalidate()requestLayout()也没有帮助)。


根据您的布局,您可能还需要确保设置android:layout_height="match_parent"(而不是wrap_content),因为Web应用程序一开始可能高度为零。 - Dani
我有同样的问题,它已经在RelativeLayout中... 我甚至设置了settings.setDomStorageEnabled(true);,但我仍然在某个链接上得到一个白色页面。该链接甚至是https。 - Black

12

我认为如果你编辑一些代码,就会没问题。看看我在下面的例子中如何做。请按照这种方式尝试。


用于显示网页
final WebView wbView = (WebView) findViewById(R.id.WebView);

WebSettings settings = wbView.getSettings();
settings.setJavaScriptEnabled(true); 
wbView.loadUrl("https://play.google.com/store/apps");
wbView.clearView();
wbView.measure(100, 100);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);

展示HTML:
查看本教程。


展示HTML: 查看本教程。
- 在webview中显示html文件的Android教程

10

不应该传递 null,而应该传递一个空的 String。例如:""
因此,您应该像这样调用它:
wview.loadDataWithBaseURL("", "<HTML><BODY><H3>测试</H3></BODY></HTML>", "text/html", "utf-8", "");


这实际上解决了替换此重载时出现的空白问题:.LoadData(html, mime, encoding)。 - CRice

6
在我的案例中,是因为我的Webview尝试使用不受信任的证书加载HTTPS页面导致的。
您可以使用以下代码片段检查是否在您的代码中存在此问题:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed();
}

Java

override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
    handler?.proceed()
}

Kotlin

如果出现此情况,请立即移除代码片段,并参考文档进一步诊断问题,可能需要将证书添加到您的密钥库中。


这指引了我正确的方向。令人烦恼的是,WebView组件没有利用系统密钥库中添加的证书。我不得不将 CA 证书包含在项目本身中,并使用网络安全配置来信任自签名证书,在调试期间进行调试。 - Jeff Camera
非常感谢,这是我的不受信任证书的问题。 - ΩlostA

5
如果仍然无法正常工作,请确保在网址前添加“http://”“https://”

4

clearView已被弃用。

请使用:

webView.loadUrl("about:blank")

4

我点赞是因为这两种方法都能正常帮助Webview运行,但它们并不是解决我的问题的方案。

我没有意识到我的WebView布局中包含的内容使用了wrap_content属性,这导致它的高度为0像素。将其设置为fill_parent后,问题得到了解决。(当WebView和应用都具有白色背景时,如果在布局设计器中显示为完全高度,则很难看出它不是完全高度。)

尽管如此,还是感谢您的帮助!


3

将您的WebView布局中的wrap_content改为fill_parent。 这对我有用。


2

使用IP地址代替Web URL,然后使用以下SSL错误处理方法覆盖WebClient。

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed(); // Ignore SSL certificate errors
}

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