7

我有一个使用 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/ 等 URL 的 ajax 调用从服务器调用网页,我不知道这是否是问题所在(我不会像 index.html 那样直接调用物理页面) ...但是,此 Web 应用程序在离线时在桌面浏览器 (Google Chrome) 中运行良好...

知道我还能做些什么来在我的 Phonegap 应用程序上启用此 HTML5 缓存功能吗?

非常感谢

4

3 回答 3

6

玩了一段时间后,我开始工作了。当遇到此类缓存问题时,您应该验证以下几点:

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

问候

于 2013-04-16T14:38:40.520 回答
1

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

如果您还没有,请查看:

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

于 2013-04-16T01:12:29.987 回答
1

我正在开发一个类似的系统。我所做的是我创建了 Phonegap 网页并将它们存储在我的 WAMP 服务器的 www 文件夹中。然后我所做的就是我在 onCreate 方法中基本上是 super.LoadURL("insert_ip_address_here/insert_name_of_folder_where_webpage_is_located") ,这会完美地加载 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(...) 行中)动态等。

于 2013-04-17T18:58:57.950 回答