【问题标题】:android webview displaying blank pageandroid webview显示空白页
【发布时间】: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);

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

有什么想法吗?

【问题讨论】:

    标签: java android eclipse android-emulator webview


    【解决方案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:
      看这个教程..

      【讨论】:

        【解决方案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_width="match_parent"
                          android:layout_height="match_parent">
                      
                          <RelativeLayout
                              android:id="@+id/ll_title"
                              android:layout_width="match_parent"
                              android:layout_height="wrap_content"
                              android:layout_alignParentTop="true"
                              android:layout_marginTop="3dp"
                              android:gravity="center_vertical"
                              android:orientation="horizontal">
                      
                              .....
                      
                          </RelativeLayout>
                      
                          <WebView
                              android:id="@+id/web_view"
                              android:layout_width="match_parent"
                              android:layout_height="match_parent"
                              android:layout_below="@id/ll_title"
                              android:background="@color/colorYellow" />
                      
                      
                          <ProgressBar
                              android:id="@+id/pb_spinning"
                              style="?android:attr/progressBarStyleSmall"
                              android:layout_width="wrap_content"
                              android:layout_height="wrap_content"
                              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)
                          

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 2014-07-19
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2018-04-07
                            • 2017-03-16
                            相关资源
                            最近更新 更多