关闭Android上的WebApps缓存

时间:2014-03-06 10:16:37

标签: android caching cordova

老实说,我不确定我是否应该在SO上发布这个;无论哪种方式,让我们互相帮助。

我正在构建一个网络应用程序,我会定期检查我的Android手机。我没有将其上传到Phonegap或其他任何东西,而是配置了一个简单的页面,其中iFrame指向Web应用程序的内容(在线托管)。

这是坏事:为了查看更改,我必须清理应用缓存。否则,'之前'版本仍然显示(因为它卡在缓存中)。

所以我希望是否有一个选项可以在页面内打开/关闭Android / Configure,关闭所有对象和文件的缓存?

非常感谢你们!

了解我的工作方式..

 -------------------------------------------------
|                   My Phone                    |
|                   With a                      |
|                                               |
|   -----------------------------------------   |
|   |           Cordova/Phonegap            |   |
|   |           Application  which          |   |
|   |           loads a                     |   |
|   |                                       |   |
|   |   --------------------------------    |   |
|   |   |       Website with            |   |   |
|   |   |       iFrame                  |   |   |
|   |   |       height:100%             |   |   |
|   |   |       width:100%              |   |   |
|   |   |                               |   |   |
|   |   |   -------------------------   |   |   |
|   |   |   |                       |   |   |   |
|   |   |   |       HTML5           |   |   |   |
|   |   |   |       Responsive      |   |   |   |
|   |   |   |       Webpage         |   |   |   |
|   |   |   |   (The WebApp itself) |   |   |   |
|   |   |   |                       |   |   |   |
|   |   |   -------------------------   |   |   |
|   |   |                               |   |   |
|   |   |                               |   |   |
|   |   ---------------------------------   |   |
|   |                                       |   |
|   ----------------------------------------    |
|                                               |
-------------------------------------------------

1 个答案:

答案 0 :(得分:10)

有两种方法可以禁用Cordova / Phonegap应用上的缓存。

  1. 首先是在加载内容时配置webview设置。
  2. 第二个是每次要刷新页面时为您的网址添加时间戳值。这更可能是一种解决方法。
  3. 我将详细描述这两个选项。

    第一个解决方案

    适用于Cordova的新版本(5.3.3)

    添加以下导入

    import android.webkit.WebSettings;
    import android.webkit.WebView;
    

    像这样覆盖onResume -

    @Override
    protected void onResume() {
        super.onResume();
        // Disable caching .. 
        WebView wv = (WebView) appView.getEngine().getView();
        WebSettings ws = wv.getSettings();
    
        ws.setAppCacheEnabled(false); 
        ws.setCacheMode(WebSettings.LOAD_NO_CACHE);
        loadUrl(launchUrl); // launchUrl is the default url specified in Config.xml
    }
    

    =======

    适用于旧版Cordova

    假设您正在Activity课程上加载您的内容。

    您可以在您的Activity类加载webview时配置它。

    以下是您可以了解如何在Phonegap/Cordova个应用中禁用浏览器缓存的示例代码段。

    public class MainActivity extends DroidGap {
        @Override
        protected void onResume() {
            super.onResume();
            // Disable caching .. 
            super.appView.getSettings().setAppCacheEnabled(false); 
            super.appView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
            super.loadUrl("http://blabla.com");
        }
    }
    

    如您所见,此代码块将在触发onResume()事件时加载内容,这意味着只要您的应用位于前台,您的网页内容就会重新加载。

    以下代码阻止了对webview的缓存。

    super.appView.getSettings().setAppCacheEnabled(false); 
    super.appView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    

    第二个解决方案

    这个解决方案真的很傻,但表现得像预期的那样。对于您的情况,它可能会有所帮助。

    您只需在网址末尾添加时间戳值即可。以下是示例代码段。

    public class MainActivity extends DroidGap {
    
        @Override
        protected void onResume() {
            super.onResume();
    
            StringBuilder urlBuilder = new StringBuilder("http://blabla.com");
            urlBuilder.append("?timestamp=");
            urlBuilder.append(new Date().getTime());
            super.loadUrl(urlBuilder.toString());
    
        }
    }
    

    每次在网址末尾添加时间戳值,并将内容加载为新内容。

    这两种方法可以避免Phonegap/Cordova中的网络应用中的缓存。

    希望这可能有所帮助。