我正在使用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获得的章节。
我很困惑。
在cordava网站上,它说明了这一点
iOS将localStorage数据存储在可在需要空间时由OS清除的位置。
我的问题 当用户仍在使用该应用程序时,是否可能发生这种情况? 我不希望他在导航到新页面的过程中,并且由于localStorage丢失而导致数据不正确。
使用sessionStorage会更好吗?
我真正想做的就是将章节nr发送到新页面,这样我就可以获取正确的内容。 (将信息发送到新页面)
使用localStorage和sessionStorage是否有正确的方法来执行此操作?
如果有更好的方法,请告诉我。
提前致谢。
答案 0 :(得分:3)
您可以使用cordova-plugin-nativestorage。 (npm link)
在您引用的storage page中,他们指定使用其他插件,因为LocalStorage
非持久性。此处提到的其他方法 none ,例如WebSQL
,IndexedDB
也符合您的要求。
此插件在Android中使用SharedPreferences
,在iOS中使用NSUserDefaults
。因此,在卸载应用程序之前,存储的变量值是持久的。 :)
这就是原因,开发人员声称,这个插件是开发的。看看原因here。
答案 1 :(得分:0)
目前(2019年3月),cordova-plugin-nativestorage在8个月内没有更新,因此我最终选择了cordova-sqlite-storage。这是另一个可靠的跨平台选项,目前是最活跃的。
要回答有关发生的问题,我相信这可能会在用户使用应用程序时发生,因为iOS会独立于任何用户行为清除数据,但我仍无法确认。
我可能偶然发现了一种防止iOS清除本地存储at the bottom of this post的方法。不确定我是否会愿意依靠此功能来保持数据持久性,但仍试图对其进行跟踪,对此表示欢迎。