安卓WebView无法正确加载

5
我在Android上使用WebViewClient时遇到了一些问题。这个网站在任何移动浏览器上都能完美运行,包括我设定用于调试的ChromeViewClient。
而且,在使用任何其他移动浏览器加载该网站时,并没有出现任何问题或错误。我使用Chrome的检查器并选择了一个设备,使用了本机的Android浏览器并测试了iOS WebView组件,以确保一切正常。
WebViewClient渲染了“部分”网站。例如,在一个页面上显示了图片,而在另一个页面上不显示;有的按钮不能点击;一个滑块不起作用等等。 我加载的网站非常依赖JavaScript和HTML5。我完全没有想到如何进一步调试这个问题,是否有某些JavaScript库无法正确加载?是否有其他方法推荐我在尝试调试此问题时实现?还是我缺少一些非常小的东西让我头痛不已?
以下是我们在网站上使用的JS文件:
- bootstrap.min.js; - jquery.min.js; - swiper.jquery.min.js; - slideout.min.js; - owl.carousel.min.js。
WebView的代码:
this.webview = (WebView)findViewById(R.id.webView);
webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);

webview.setWebViewClient(new WebViewClient(){
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        view.loadUrl(url);
        firstLoad = true;
        return true;
    }

    // when the page is finished loading
    public void onPageFinished(WebView view, String url){}

    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){
        Toast.makeText(getBaseContext(), "Could Not load. " + description, Toast.LENGTH_SHORT).show();

        alertDialog.setTitle("Error");
        alertDialog.setMessage(description);
        alertDialog.setButton("OK", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int which){
                return;
            }
        });

        alertDialog.show();
    }
});

webview.loadUrl("mywebsite.com");

Android 4.4及以上版本使用Chromium引擎,但在此之前是WebKit引擎。您知道您的问题是否与特定版本有关吗? - Rupert Rawnsley
@RupertRawnsley 我刚在4.0.3上测试了一下,WebView似乎有同样的问题。 - Adrian David Smith
我会剔除除启用JavaScript之外的所有内容,然后检查logcat是否有任何意外错误,例如JavaScript解析错误。如果失败了,就发布一个jsfiddle版本的页面,这样我们就可以在本地尝试它。没有这个,很难推测;代码中没有明显的问题,只是shouldOverrideUrlLoading有点不寻常。 - Rupert Rawnsley
@RupertRawnsley,我即将用我的新手错误震惊你。我没有设置setDomStorageEnabled(true);来使用会话存储。 - Adrian David Smith
@RupertRawnsley * 会话存储 * 这是我度过的几个小时压力不小。感谢您的回复和帮助! - Adrian David Smith
1个回答

7

我通过setDomStorageEnabled(true);让它工作了。

当使用本地存储时,您需要进行此设置。


1
呃,经典的Android WebView!iOS等效物的默认行为更加宽容。 - Rupert Rawnsley
1
当我在Android 4.4上运行我的页面时,我遇到了同样的问题。使用setDomStorageEnabled并没有解决我的问题。 - Yadynesh Desai
1
我已经完成了以下所有步骤以使其工作:webView.settings.javaScriptEnabled = true webView.settings.domStorageEnabled = true webView.settings.userAgentString = "Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17" - Jay Mayu

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