android webview显示空白页
Posted
技术标签:
【中文标题】android webview显示空白页【英文标题】:android webview displaying blank page 【发布时间】:2012-12-27 08:43:14 【问题描述】:我有一个 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);
这三个都给了我相同的结果。什么都没有。
有什么想法吗?
【问题讨论】:
【参考方案1】:您应该将空的String
传递给它,而不是传递null。例如:""
所以你应该这样称呼它:wview.loadDataWithBaseURL("", "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8","");
【讨论】:
【参考方案2】:我认为,如果您编辑一些代码,那就没问题了。看看我在下面的情况下是怎么做的。以这种方式为您尝试..用于显示网页
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: 看这个教程..
android-tutorial-html-file-in-webview【讨论】:
【参考方案3】:我给 +1 是因为这些都是让 webview 正常工作的有效帮助,但这不是我的问题的解决方案。
我没有意识到我的 webview 布局包含一个 wrap_content,这导致它的高度为 0px。通过将其设置为 fill_parent 我解决了这个问题。 (带有白色背景的 Webview 和带有白色背景的应用程序,当它在布局设计器中显示为全高时,您无法真正判断它不是全高。)
感谢您的帮助!
【讨论】:
【参考方案4】:您可以使用以下代码,这会有所帮助:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());
private class MyWebViewClient extends WebViewClient
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
if (Uri.parse(url).getHost().equals("www.example.com"))
// This is my web site, so do not override; let my WebView load the page
return false;
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
【讨论】:
【参考方案5】:clearView
已弃用。
用途:
webView.loadUrl("about:blank")
【讨论】:
【参考方案6】:我认为您需要的是 WebViewClient。设置 webviewclient 后调用 webview.loadUrl(_url); 像这样的东西....
private void loadUrlInWebView(String _URL)
WebView myWebView = (WebView) findViewById(R.id.webviewer);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.loadUrl(_URL);
private class MyWebViewClient extends WebViewClient
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
view.loadUrl(url);
return true;
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
【讨论】:
【参考方案7】:可能有点晚了,但我想和你分享我的经验,因为我遇到了同样的问题并且花了很多时间。
将您的 WebView
放入 RelativeLayout
而不是 FrameLayout
。
我测试过的内容:我的WebView
的onPageFinished()
每次都被调用,但在屏幕上我得到了空白页。
从chrome://inspect
WebView
调试器我可以通过按inspect
按钮“ping”我的WebView
,然后WebView
立即刷新。
我的想法 - FrameLayout
中的WebView
没有正确呈现,RelativeLayout
解决了这个问题(即使 invalidate()
和 requestLayout()
调用没有帮助)。
【讨论】:
根据您的布局,您可能还必须确保设置android:layout_height="match_parent"
(而不是 wrap_content
),因为 webApp 一开始可能只有零高度
我有同样的问题,它已经在 relativeLayout 中......我什至设置了settings.setDomStorageEnabled(true);
,但我仍然在某个链接上得到一个白页。链接甚至是 https。【参考方案8】:
WebSettings settings = wbView.getSettings();
settings.setDomStorageEnabled(true);
【讨论】:
这对我来说是个问题。 webview 能够显示一些网页,但对于其他一些页面有一个空白屏幕。添加这个解决了我的问题,谢谢! 我必须同时使用这个和wbView.getSettings().setJavaScriptEnabled(true);
节省我的时间...谢谢。
让我开心!谢谢!
谢谢!!尝试了几个小时来解决这个问题【参考方案9】:
在您的 webview 布局中将 wrap_content 更改为 fill_parent。它对我有用
【讨论】:
【参考方案10】:尝试为您的模拟设备增加 RAM。这为我解决了问题。
我通过查看 Android Monitor (Android Studio) 中的 logcat 消息发现了这一点。下面的消息让我知道增加 RAM 有什么问题:
W/art: Throwing OutOfMemoryError "Failed to allocate a 6635532 byte allocation with 1170528 free bytes and 1143KB until OOM"
W/JavaBrowserViewRendererHelper: Error allocating bitmap
E/chromium: [ERROR:java_browser_view_renderer_helper.cc(132)] Error unlocking java bitmap pixels.
【讨论】:
【参考方案11】:如果仍然无法使用,请尝试在网址前添加 "http://" 或 "https://",它应该可以使用。
【讨论】:
【参考方案12】:我的 webview 上面显示了一个白色空白方块,有时完全空白。这仅在加载某些数据时发生。
将其更改为 RelativeLayout,并将 layout_height 设置为 match_parent 对我有用。
<RelativeLayout xmlns:android=...
android:layout_
android:layout_>
<RelativeLayout
android:id="@+id/ll_title"
android:layout_
android:layout_
android:layout_alignParentTop="true"
android:layout_marginTop="3dp"
android:gravity="center_vertical"
android:orientation="horizontal">
.....
</RelativeLayout>
<WebView
android:id="@+id/web_view"
android:layout_
android:layout_
android:layout_below="@id/ll_title"
android:background="@color/colorYellow" />
<ProgressBar
android:id="@+id/pb_spinning"
style="?android:attr/progressBarStyleSmall"
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:visibility="gone" />
</RelativeLayout>
【讨论】:
【参考方案13】:使用 ip 地址而不是 web url 然后使用以下 ssl 错误处理方法覆盖 webclient
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)
handler.proceed(); // Ignore SSL certificate errors
【讨论】:
【参考方案14】:就我而言,这是因为我的 webview 试图使用 HTTPS 加载证书不受信任的页面。
您可以使用以下 sn-p 检查您的代码中是否存在这种情况:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)
handler.proceed();
Java
override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?)
handler?.proceed()
科特林
然后,如果是这种情况,请快速删除 sn-p 并参考the documentation 以进一步诊断问题并可能将证书添加到您的密钥库。
【讨论】:
这为我指明了正确的方向。令人讨厌的是,WebView
组件没有使用添加到系统密钥库中的证书。我不得不在项目本身中包含 CA 证书,并在调试期间使用网络安全配置来信任自签名证书。【参考方案15】:
只需使用 loadDataWithBaseURL
loadDataWithBaseURL(null,"html content" , "text/html" , "utf-8",null)
【讨论】:
以上是关于android webview显示空白页的主要内容,如果未能解决你的问题,请参考以下文章
在 Android WebViewClient 中获取空白页