HTML5 Android Phonegap Web应用使用缓存清单无法离线工作

7
我有一个简单的Web应用,使用Phonegap和Android构建,并从服务器调用外部资源(js、css、html),而不是将它们存储在Phonegap资产文件夹中。我更喜欢使用外部资源,因为我的服务器可以提供负责国际化的html页面。
当WIFI打开时,这个Web应用在我的Android设备上运行良好,但停止WIFI后就会失败。由我的服务器传递的index.html文件包含一个有效的manifest文件,正确的MIME类型为“text/cache-manifest”,列出了应用程序需要的每个文件。
我的Android Activity类应该启用缓存:
    this.appView.getSettings().setDomStorageEnabled(true);
    this.appView.getSettings().setAppCacheMaxSize(1024 * 1024 * 15);  

    String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
    this.appView.getSettings().setAppCachePath(appCachePath);
    this.appView.getSettings().setAllowFileAccess(true);
    this.appView.getSettings().setAppCacheEnabled(true);

值得一提的是,我的应用程序使用类似于/aaa/bbb/的URL进行AJAX调用,以从服务器调用Web页面,并且我不知道这可能是否是问题(我没有像index.html那样直接调用物理页面)...然而,当离线时,此Web应用程序在桌面浏览器(Google Chrome)中工作正常...你有什么更多的想法可以让我在我的Phonegap应用程序上启用HTML5缓存功能吗?非常感谢。
3个回答

6
经过一番尝试,我终于让它成功了。以下是遇到此类缓存问题时需要核实的一些要点:
  • 谨慎处理通过GET方法传递的url参数...当我在我的应用程序的页面之间导航时,我会传递参数,这些参数使我的url与清单文件中的不同,因此导致缓存失败。
  • 在手机上测试离线模式时,我只关闭了WIFI,认为这足以触发我的应用程序的缓存版本,但实际上不是这样......由于我正在测试发布在本地网络IP(例如192.168.2.11)下的应用程序,所以我的应用程序似乎通过仍然打开的3G网络尝试到达该IP......因此,在离线测试时请使用飞行模式。
  • 不确定这是否是必要的,因为我在某些其他线程中读到了这个,但我将我的清单文件重命名为cache.manifest。

问候


1

谢谢,但这已经完成了...您可以在我的问题中看到修复。 - Etienne Desgagné

1
我正在开发一个类似的系统。我的做法是创建了Phonegap网页,并将它们存储在WAMP服务器的www文件夹中。然后,在onCreate方法中,我基本上使用super.LoadURL("插入IP地址/插入网页所在文件夹的名称"),这样就可以完美地加载Phonegap应用程序(是的,Android应用程序本身只需要一行代码)。但是,您仍然需要确保已正确完成Phonegap所需的所有配置,如config.xml、清单等(有关此说明,请参见https://www.adobe.com/devnet/archive/html5/articles/getting-started-with-phonegap-in-eclipse-for-android.html)。
如果您选择这条路,请告诉我。我可以提供额外的支持,例如使用多播使本地系统中的IP地址(在super.loadurl(...)中)动态化等。

是的,这基本上就是我正在做的事情,我在onCreate方法中使用super.LoadURL(我的http url)调用我的远程index.html。如果您查看我的问题,我还在同一方法中定义了各种设置以启用缓存... - Etienne Desgagné
有趣,缓存会让应用程序运行更快吗?(我在考虑在我的代码中实现它)。 - aagarwal

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