【问题标题】:iOS 7 webview and localStorage persistenceiOS 7 webview 和 localStorage 持久化
【发布时间】:2014-10-26 23:46:02
【问题描述】:

我正在使用 PhoneGap/Cordova 开发一个混合应用程序(仅适用于 iOS 和 Android),并希望使用 HTML5 localStorage 来存储内容以供离线访问。

http://caniuse.com/#search=localStorage 说 - “在 iOS 5 和 6 中,localStorage 数据存储在操作系统偶尔可能会清除的位置。”

  1. iOS 7(及更高版本)webview 的情况如何,localStorage 在什么情况下会持续存在或被清除(由操作系统或用户)?

  2. 应用程序的更新是否会清除 localStorage?

  3. 用户在 Safari 上清除浏览器历史记录的情况如何 - 这也适用于 webview?

  4. 我是否需要担心(或者我什至可以控制)在 fils 系统上的哪个位置创建 localStorage。我知道它不应该在 iCloud 上备份。


我有一个设备 (iPad) 并检查文件系统,我发现 localStorage 文件位于应用沙箱内的 ~/Library/Caches 中,见下图。

来自文档:

https://developer.apple.com/icloud/documentation/data-storage/index.html 可以再次下载或重新生成的数据应存储在 /Library/Caches 目录中。您应该放在 Caches 目录中的文件示例包括数据库缓存文件和可下载内容,例如杂志、报纸和地图应用程序使用的内容。

我这样做只是为了设置数据:

  localStorage.setItem('foo','this is the FOO value');
  localStorage.setItem('bar','and this is the BAR value');

【问题讨论】:

标签: ios iphone html cordova local-storage


【解决方案1】:

如果您使用的是cordova,这个问题很久以前就已经解决了,即使是iOS 5 和iOS 6。如果您使用的是最新版本的cordova,您不必担心。

【讨论】:

  • 您好,谢谢 - 请问您有更多信息的链接吗?我可以做 localStorage.setItem('foo','FOO value');还是我需要插件等?
  • 我没有链接,我只是关注cordova开发,很久以前就读到这个了。它应该在 cordova 或 phonegap 博客上,他们会在其中发布每个版本的更改,但我不记得修复了这个问题的版本。或者你可以尝试在cordova jira上搜索
  • 我没有链接,但我已经查看了几次代码,我可以验证这个问题是否已修复(并且已经修复了一段时间)。随意使用 localStorage。 (如果您的目标是 WP7/8,我会选择 setItem,否则您可以使用 localStorage.foo="FOO value" 引用它)。请记住这里有大小限制,所以不要疯狂。此外,清除 Mobile Safari 的缓存根本不会影响您的应用程序(沙盒),并且它还会在更新过程中持续存在(但不是删除 + 重新安装)。
  • jcesarmobile - 谢谢,我有空的时候会看看 jira 和博客。关于文档,这有很多关于 localstorage 的详细信息 - cordova.apache.org/docs/en/3.0.0/…,但对于当前版本,cordova.apache.org/docs/en/3.5.0/… 它只是将您引向 W3C 规范。我可以使用 3.0 指南吗?
  • Kerri - 感谢您的回复。根据我对文档所做的上述评论,我以前没有见过你的 localStorage.foo="FOO value" 语法。只是为了让我在做网络工作时保持一致,我可以在 Android/iOS 中使用 setItem 等并且仍然可以使用修复吗?还是该修复仅适用于您的语法?
【解决方案2】:

如果您仍然遇到 Cordova-iOS v4 的问题,请尝试使用 NativeStorage 插件。 https://www.npmjs.com/package/cordova-plugin-nativestorage.

它具有设置、放置和获取功能,可实现平台功能,如 android 共享首选项和 iOS NSUserDefaults,使数据存储尽可能安全。

cordova plugin add cordova-plugin-nativestorage

NativeStorage.putObject("reference_to_value",<object>, <success-callback>, <error-callback>);

NativeStorage.getObject("reference_to_value",<success-callback>, <error-callback>);

【讨论】:

    【解决方案3】:

    最好的办法是使用 NativeStorage 插件:

    https://www.npmjs.com/package/cordova-plugin-nativestorage

    回答您的问题:

    1. localStorage 数据保存在文件系统的缓存目录中,并且缓存被操作系统频繁清理(例如当设备磁盘空间不足时)。
    2. 不,更新应用不会清除本地存储。
    3. 不,Safari 本地存储和 Webview 本地存储是分开的。
    4. 不,您无法控制它在文件系统上的存储位置。

    【讨论】:

      猜你喜欢
      • 2017-12-08
      • 2021-05-20
      • 2021-10-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 2012-06-27
      相关资源
      最近更新 更多