HTML5 Android Phonegap Web应用程序无法使用缓存清单脱机工作

时间:2013-04-08 02:04:10

标签: android html5 cordova cache-manifest

我有一个使用Phonegap和Android构建的简单Web应用程序,可以从服务器调用外部资源(js,css,html),而不是将其存储在Phonegap资产文件夹中。我更喜欢使用外部资源,因为我的服务器可以提供负责国际化的html页面。

当WIFI开启时,这个网络应用程序在我的Android设备上运行良好,但在停止WIFI时失败。我的服务器提供的index.html文件包含一个有效的清单文件,其中包含正确的mimetype('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 /等网址的ajax调用来从服务器调用网页,我不知道这是否可能是问题(我不会像索引一样直接调用物理页面.html)...但是,这个网络应用程序在离线时在桌面浏览器(谷歌浏览器)中运行良好...

知道我还可以在Phonegap应用上启用此HTML5缓存功能吗?

非常感谢

3 个答案:

答案 0 :(得分:6)

玩了一会儿后,我开始工作了。当遇到这种类型的缓存问题时,您应该验证以下几点:

  • 注意使用GET方法传递的url参数...我在我的应用程序页面之间导航时传递参数,这些参数使得我的网址与清单文件中的网址不同,导致缓存失败。
  • 在我的手机上测试离线模式时,我只是关闭了WIFI,认为这足以触发我的应用程序的缓存版本但它不是......因为我正在测试我在本地网络IP下发布的应用程序(如192.168.2.11),我的应用程序似乎试图通过仍处于打开状态的3G网络到达该IP ...因此在离线测试时使用飞行模式。
  • 当我在其他一些线程上读取它时,不确定是否需要这个,但我将我的清单文件重命名为cache.manifest。

此致

答案 1 :(得分:1)

显然你需要“修复Android Shell Native App以启用HTML5缓存”。

如果您还没有,请查看:

http://tmkmobile.wordpress.com/2012/03/04/html5-offline-solution/

答案 2 :(得分:1)

我正在开发一个类似的系统。我做的是创建了Phonegap网页并将它们存储在我的WAMP服务器的www文件夹中。然后我做的是我在onCreate方法中基本上是super.LoadURL(“insert_ip_address_here / insert_name_of_folder_where_webpage_is_located”),这将完美地加载phonegap应用程序(是的,你所需要的只是Android应用程序本身的代码行)。但是,您仍然需要确保正确完成phonegap所需的config.xml,清单和所有配置(有关此操作的说明,请参阅http://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CEAQFjAA&url=http%3A%2F%2Fwww.adobe.com%2Fdevnet%2Fhtml5%2Farticles%2Fgetting-started-with-phonegap-in-eclipse-for-android.html&ei=XfBuUcmKNu684AP3vYDQBw&usg=AFQjCNG16oUTDylMqz20YiiMZTlDxrfbPg&bvm=bv.45368065,d.dmg)。

如果这是您选择追求的道路,请告诉我。我可以提供额外的支持,例如使用多播等方式为本地系统制作ip-address(在行super.loadurl(...)中)动态。