繁体   English   中英

加载后Android WebView WebArchive冻结

[英]Android WebView WebArchive freeze after loading

我目前正在为平板电脑开发一个android应用程序,我想介绍用例:“如果没有互联网连接,我希望该应用程序能够正常运行”。

我使用网络视图将调查加载到应用程序中,因此,一旦安装在商店中,就无需每次需要进行新的改头换面或添加问题时都安装新版本。

为了解决没有连接的情况,当需要加载网页时,如果没有wifi,我会保存一个要加载的webArchive。

private void setMainView() {
    mainview = (WebView) findViewById(R.id.wvMain);

    WebSettings webSettings = mainview.getSettings();
    webSettings.setLightTouchEnabled(true);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this);
    mainview.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");

    if (DetectConnection.checkInternetConnection(this)){
        mainview.setWebViewClient(new WebViewClient() {

            public void onPageFinished(WebView view, String url) {
                File webpage = new File(context.getExternalFilesDir(Environment.DIRECTORY_DCIM).getAbsolutePath()+  File.separator +"home.mht");

                mainview.saveWebArchive(webpage.toString());
                editor.putString(BuildConfig.HOME_PAGE_WEB_ARCHIVE_FILE,webpage.toString() );
                editor.commit();
            }
        });


        mainview.loadUrl(BuildConfig.SERVER_URL + BuildConfig.HOME_PAGE);
    }
    else{
        String filename = getSharedPreferences(BuildConfig.PREFERENCES_NAME, 0).getString(BuildConfig.HOME_PAGE_WEB_ARCHIVE_FILE,null);
        mainview.setWebChromeClient(new WebChromeClient());
        mainview.loadUrl("file:///"+filename);

    }
}    

唯一的问题是,webarchive一旦加载就冻结。 我尝试了很多方法使它起作用,但是解决方案使我逃脱了。

当我将我的应用程序设置为平面模式并重新加载该应用程序时,我看到主页正常,但单击事件不起作用。 我的Android Javascript界面​​也无法正常工作,因为我测试了当应用程序加载完成后发送Toast进行调试的过程,因此我猜测javascript在我的webarchive中无法正常工作,或者webarchive可能不包含来自其他网站的CSS和Javascript网站,例如W3.css和JQuery?

也许如果我使用这些资产的本地版本,它们将包含在webarchive中。

欢迎大家提出意见。

谢谢

我最终使用了Webview的缓存,而不是加载Web存档。

我首先添加了cache.appcache作为我的主页链接到它的网页的根。

<html manifest="cache.appcache">

在根目录(wwww / http_doc),我添加了以下文件:

CACHE MANIFEST
/home
/thank-you
/css/w3.css
/js/jquery-3.3.1.min.js
/images/happy1.png
/images/happy2.png
/favicon.ico

#NETWORK
NETWORK:
/home
/thank-you

#FALLBACK
FALLBACK:
/home /offline.html
/thank-you /offline_thankyou.html

如果网络可用,则后备部分允许使用html文件。 然后,我激活了Webview的缓存:

WebSettings webSettings = mainview.getSettings();
webSettings.setAppCacheEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
webSettings.setAppCachePath(
         getApplicationContext().getCacheDir().getAbsolutePath());

现在,每次我修改文件“ cache.appcache”并重新加载应用程序时,都会获取当前“ offline.html”文件的副本,并根据缓存重新加载工作站点。 不错的是,我要加载一个非常静态的网站,因此没有互联网连接,它的功能是100%正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM