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("", "&lt;HTML&gt;&lt;BODY&gt;&lt;H3&gt;Test&lt;/H3&gt;&lt;/BODY&gt;&lt;/HTML&gt;","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

我测试过的内容:我的WebViewonPageFinished() 每次都被调用,但在屏幕上我得到了空白页。

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 设置为 ma​​tch_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显示空白页的主要内容,如果未能解决你的问题,请参考以下文章

WebView 显示空白页

在 Android WebViewClient 中获取空白页

Webview 空白页 quakenet

为啥word空白页删不掉?

我的excel2016打开以后是空白页,要点击编辑栏之后才能显示内容,怎么修复?

Word打印预览时出现空白页怎么回事、如何删除?