【问题标题】:HTML5 Android Phonegap Web app not working offline with cache manifestHTML5 Android Phonegap Web 应用程序无法使用缓存清单脱机工作
【发布时间】:2013-04-08 02:04:09
【问题描述】:

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

当 WIFI 开启时,此网络应用程序在我的 android 设备上运行良好,但在停止 WIFI 时失败。我的服务器提供的 index.html 文件包含一个有效的 ma​​nifest 文件,该文件具有正确的 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 调用从服务器调用网页,我不知道这是否是问题所在(我不会像索引那样直接调用物理页面.html)...但是,此网络应用在离线时在桌面浏览器 (Google Chrome) 中运行良好...

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

非常感谢

【问题讨论】:

    标签: android html cordova cache-manifest


    【解决方案1】:

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

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

    问候

    【讨论】:

      【解决方案2】:

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

      如果您还没有,请查看:

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

      【讨论】:

      • 谢谢,但这已经完成了......您可以在我的问题中看到修复
      【解决方案3】:

      我正在开发一个类似的系统。我所做的是我创建了 Phonegap 网页并将它们存储在我的 WAMP 服务器的 www 文件夹中。然后我所做的就是我在 onCreate 方法中基本上是 super.LoadURL("insert_ip_address_here/insert_name_of_folder_where_webpage_is_located") ,这会完美地加载 phonegap 应用程序(是的,您只需要 Android 应用程序本身中的一行代码)。但是,您仍然必须确保正确完成 config.xml、清单和 phonegap 所需的所有配置(有关此方面的说明,请参阅 https://www.adobe.com/devnet/archive/html5/articles/getting-started-with-phonegap-in-eclipse-for-android.html)。

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

      【讨论】:

      • 是的,这基本上就是我正在做的,我在 onCreate 方法中用 super.LoadURL(my http url) 调用我的远程 index.html。如果您查看我的问题,我还会定义各种设置以使用相同的方法启用缓存...
      • 有意思,缓存会让应用运行得更快吗? (我正在考虑在我自己的代码中实现它)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 2023-04-10
      • 2015-10-28
      • 2012-05-31
      • 2018-03-14
      • 2012-09-24
      相关资源
      最近更新 更多