WebView不能正常显示

4
WebView不能正确显示网站,需要帮助!我在其他所有网站上使用相同的代码都能正常运行,不确定问题出在哪里。有什么需要添加的吗?在Chrome和其他浏览器中都运行良好,所以不知道该怎么做。希望能得到帮助!
public class Website extends Activity {
    WebView myWebView;
    LinearLayout root;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.website);

        myWebView = (WebView) findViewById(R.id.webView);

        root = (LinearLayout) findViewById(R.id.root);

        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);

       myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
           myWebView.setWebViewClient(new WebViewClient());
           myWebView.getSettings().setBuiltInZoomControls(true);
           myWebView.getSettings().setSupportZoom(true); 
           myWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
                   myWebView.getSettings().setDomStorageEnabled(true);

           myWebView.loadUrl("http://dspart.org/");

        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    public class WebAppInterface {
        Context mContext;

        /** Instantiate the interface and set the context */
        WebAppInterface(Context c) {
            mContext = c;
        }

        /** Show a toast from the web page */
        @JavascriptInterface
        public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }

        private class MyWebViewClient extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (Uri.parse(url).getHost().equals("http://dspart.org")) {
                    // 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;
            }

        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                if (myWebView.canGoBack()) {
                    myWebView.goBack();
                } else {
                    root.removeView(myWebView);
                    myWebView.removeAllViews();
                    myWebView.destroy();
                    this.finish();
                }
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            root.removeView(myWebView);
            myWebView.removeAllViews();
            myWebView.destroy();
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);

        }
    }
}

1
尝试将loadUrl()移动到配置WebView之后,而不是之前。 - CommonsWare
谢谢您的尝试,但是它没有起作用。 - user2407147
如果您能够为问题投票,那将非常棒。 - user2407147
2个回答

5
一些建议
在配置WebView之后再移动loadUrl()(我注意到评论中有这个建议,但无论如何应该放在那里)。
看起来你的页面缺少样式。它们可能加载失败,或者被WebView禁用了。尝试添加 myWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);myWebView.getSettings().setDomStorageEnabled(true); 另外,WebView似乎被缩小了:
尝试删除
myWebView.getSettings().setUseWideViewPort(true); myWebView.getSettings().setLoadWithOverviewMode(true); 顺便说一下,你实际上没有为任何事情使用MyWebViewClient,而是依赖于默认的WebViewClient

感谢您的评论。我已经尝试了上述所有方法,但最终结果只是之前的放大版本。不过还是非常感谢您的建议。 - user2407147
糟糕。我在自己的 WebView 上尝试了一下,它可以正确加载其他样式。由于这是一个日本网站,也许有一些字符导致 WebView 在解析时出现问题?CSS 的 URL 中是否存在非英文字符? - ggmathur
我不确定,因为我不拥有这个网站。但它是一个日本网站。 - user2407147
我尝试加载桌面站点,但有些图像不在框架内,看起来很奇怪,但我真的想要显示移动站点:S - user2407147

0
我不知道这是否可以解决问题,但是当您在 WebView 上调用 loadUrl 时,WebViewClient 方法会在后台线程上调用。我认为您无法直接从后台线程调用 UI 资源。请参见 如何在 Android 中从线程类启动活动? 的示例。

问题是,我在尝试的每个其他网站上都能运行代码。但还是谢谢。 - user2407147
我认为如果你从主线程外调用UI相关的内容,其行为是未定义的(随机的)。不过我不确定。你尝试过将所有UI相关的内容都放在主线程上运行吗? - user2579943
不确定我该如何实现,你能否使用我的代码展示一下? - user2407147

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