在Android上为Web应用关闭缓存

7
老实说,我不确定是否应该将这个问题发布在SO上,无论如何,让我们互相帮助。我正在构建一个网页应用程序,目前经常在我的Android手机上查看。为了避免每次上传到Phonegap或其他工具,我配置了一个简单的页面,其中包含一个指向在线托管的网页应用程序内容的iFrame。这种方法的缺点是,为了看到更改,我必须清除应用程序缓存,否则“先前”的版本仍然显示(因为它被卡在缓存中)。所以我想知道是否有一种在Android/页面中打开/关闭所有对象和文件缓存的选项?非常感谢!为了给大家了解我的工作方式...
 -------------------------------------------------
|                   My Phone                    |
|                   With a                      |
|                                               |
|   -----------------------------------------   |
|   |           Cordova/Phonegap            |   |
|   |           Application  which          |   |
|   |           loads a                     |   |
|   |                                       |   |
|   |   --------------------------------    |   |
|   |   |       Website with            |   |   |
|   |   |       iFrame                  |   |   |
|   |   |       height:100%             |   |   |
|   |   |       width:100%              |   |   |
|   |   |                               |   |   |
|   |   |   -------------------------   |   |   |
|   |   |   |                       |   |   |   |
|   |   |   |       HTML5           |   |   |   |
|   |   |   |       Responsive      |   |   |   |
|   |   |   |       Webpage         |   |   |   |
|   |   |   |   (The WebApp itself) |   |   |   |
|   |   |   |                       |   |   |   |
|   |   |   -------------------------   |   |   |
|   |   |                               |   |   |
|   |   |                               |   |   |
|   |   ---------------------------------   |   |
|   |                                       |   |
|   ----------------------------------------    |
|                                               |
-------------------------------------------------

你正在使用Android WebView吗? - Siddharth_Vyas
猜不到吧?它只是一个HTML5响应式页面,加载在一个iframe中,打包在Cordova应用程序中。关于webview没有任何配置。 - Sander Schaeffer
有一种方法可以在Android中禁用浏览器缓存,但我无法想象你是如何做到的。你能否请发一些代码? - gokhanakkurt
新增的可视化能否解决一些疑问? :) - Sander Schaeffer
有点儿,你需要将托管在线的网站加载到 Cordova 应用程序中。如果我的理解没错,我会发布一个解决方法 :) - gokhanakkurt
实际上是的。该应用程序在HTML页面中的iFrame中加载,该页面又被加载到Cordova应用程序中。 :) - Sander Schaeffer
1个回答

11

在 Cordova/Phonegap 应用程序中禁用缓存有两种方法。

  1. 第一种方法是在加载内容时配置 Webview 设置。
  2. 第二种方法是每次想要刷新页面时向 URL 添加一个时间戳值。这更像是一种解决方法。

我会详细说明这两个选项。

第一个解决方案

对于 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()事件被触发时加载内容,这意味着当您的应用程序在前台时,您的Web内容将被重新加载。

下面的代码片段可以防止WebView缓存。

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

第二种解决方案

这个解决方案非常简单,但是可以按预期运行。对于您的情况,它可能会有所帮助。

您只需在URL末尾添加时间戳即可。以下是代码片段示例:

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中避免缓存Web应用程序的两种方法。

希望这对您有所帮助。


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