android webview显示空白页面

时间:2013-01-13 04:29:10

标签: java android eclipse android-emulator webview

我有一个Android应用程序,我正在使用在android 2.3.3上运行的模拟器开发,嵌入式WebView在嵌套在linearlayout(垂直)的framelayout中。无论我使用什么代码,它实际上从未做过任何事情。我有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);

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

有什么想法吗?

14 个答案:

答案 0 :(得分:26)

wbView.getSettings().setDomStorageEnabled(true);

答案 1 :(得分:12)

可能有点太晚了,但我想与你分享我的经验,因为我遇到了同样的问题并花了很多时间。

将您的WebView放入 RelativeLayout ,而不是 FrameLayout

我测试的内容:我的WebView onPageFinished()每次都被调用,但在屏幕上我得到了空白页。从chrome://inspect WebView调试器我能够&#34; ping&#34;按WebView按钮inspect,之后WebView立即刷新。我的想法 - WebView未在FrameLayout中正确呈现,RelativeLayout修正了问题(即使invalidate()requestLayout()来电也没有帮助)。

答案 2 :(得分:11)

我想如果你编辑了一些代码,那就没关系了。看看我在下面的例子中是怎么做的。以这种方式为你试试..
用于显示网页

final WebView wbView = (WebView) findViewById(R.id.WebView);

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

用于显示HTML:
请参阅本教程..

答案 3 :(得分:4)

我给了+1,因为这些都是使webview正常工作的有效帮助,但它不是我的问题的解决方案。

我没有意识到我在webview布局的包含上有一个wrap_content,这导致它的高度为0px。通过将此设置为fill_parent我解决了问题。 (带有白色背景的Webview和带有白色背景的应用程序,当它在布局设计器中显示为全高时,您无法确切地告诉它不是全高度。)

感谢您的帮助!

答案 4 :(得分:4)

clearView已被弃用。

使用:

webView.loadUrl("about:blank")

答案 5 :(得分:3)

而不是传递null,您应该将空String传递给它。例如:""
所以你应该这样称呼它:
wview.loadDataWithBaseURL("", "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8","");

答案 6 :(得分:2)

在webview布局中将wrap_content更改为fill_parent。它对我有用

答案 7 :(得分:1)

我认为您需要的是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();
    }
}

答案 8 :(得分:1)

如果仍然无法正常运行,请尝试在网址之前添加“ http://” “ https://” ,它应该可以正常工作。

答案 9 :(得分:0)

您可以使用以下代码,这将有所帮助:

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;
    }
}

答案 10 :(得分:0)

尝试为您的模拟设备增加 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 :(得分:0)

我的Web视图在其顶部显示白色空白方块,有时完全空白。这仅在加载某些数据时发生。

将其更改为 RelativeLayout ,并将layout_height设置为 match_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>

答案 12 :(得分:0)

使用IP地址代替Web网址,然后使用以下ssl错误处理方法来覆盖webclient

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

答案 13 :(得分:0)

在我的情况下,这是由于我的Web视图试图使用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()
}

科特林

然后,如果是这种情况,请快速删除该代码段并参考the documentation进一步诊断问题,并可能将证书添加到您的密钥库中。