我正在使用PhoneGap构建混合应用程序。它需要在iOS上运行。我有点困惑,希望有人可以提供帮助。
我在导航中使用localStorage。我的应用程序有不同的章节,我正在重用UI。
<a href="chapter.html" data-ajax="false" onClick="localStorage.setItem('chapter', '1')" class="ui-btn">Chapter 1</a>
当你点击网址时,它会从localStorage获取章节并知道要获取哪些内容。
var chapter = localStorage.getItem('chapter');
我的要求 只要用户正在使用应用程序,localStorage只需要持久化。 没关系,如果在使用关闭应用程序时localStorage丢失了。
但是当他使用该应用程序时,他应该可以访问localStorage。要获得正确的内容,您需要从localStorage获得的章节nr。
我很困惑。 在cordava网站上,它说明了这一点。 iOS将localStorage数据存储在可在需要空间时由OS清除的位置。
我的问题 当用户仍在使用该应用程序时,是否可能发生这种情况?我不希望他在导航到新页面的过程中,并且因为localStorage丢失而得到不正确的数据。
使用sessionStorage会更好吗?
我真正想做的就是将章节nr发送到新页面,这样我就可以获取正确的内容。 (将信息发送到新页面)
是使用localStorage和sessionStorage正确的方法吗?
如果有更好的方法,请告诉我。
提前致谢。
你可以使用cordova-plugin-nativestorage。 (npm link)
在你引用的storage page中,他们指定使用其他插件,因为LocalStorage
是非持久性的。也没有像WebSQL
那样提到的其他方法,IndexedDB
适合您的要求。
这个插件使用Android中的SharedPreferences
和iOS中的NSUserDefaults
。因此,在卸载应用程序之前,存储的变量值是持久的。 :)
这就是为什么,开发人员声称,这个插件是开发的。看看here的原因。
目前(2019年3月)cordova-plugin-nativestorage在8个月内没有更新,所以我最终选择了cordova-sqlite-storage。这是另一个可靠的跨平台选项,目前最活跃。
要回答有关发生的问题,我相信这可能发生在用户使用应用程序时,因为它是iOS独立于任何用户行为清除数据,但我还没有能够确认这一点。
我可能偶然发现了阻止iOS清除本地存储at the bottom of this post的方法。不确定我是否愿意依靠此功能来保持数据持久性仍然试图追踪到这一点,评论非常欢迎。