Phonegap - 在页面间传递JS数据

5
我有一个问题,关于在一个 JQM / Phonegap 应用程序中从一个页面传递数据到另一个页面。
如果我有一个包含一些数据的 JS 对象,例如搜索词、位置和其他过滤值,并且用户从搜索页面跳转到设置页面,然后再返回搜索页面... 我该如何保存之前页面的信息?是否有像 cookies 这样的东西,或者我应该始终使用 sqlite 来保存信息并每次用户返回到搜索页面时读取它呢?
3个回答

15

我会使用LocalStorage,它非常简单易用。它可以让你存储纯文本:

// Writing 'something' in localStorage.myvariable
localStorage.myvariable = 'something'

// Displaying the previous variable
console.log(localStorage.myvariable)

如果普通文本不足以满足您的需求,需要存储数据结构,您可以实现类似于以下这样的代码:

Storage.prototype.setObject = function(key, value) { this.setItem(key, JSON.stringify(value)); }
Storage.prototype.getObject = function(key) { var value = this.getItem(key);return value && JSON.parse(value); }

// Storing a JSON object
localStorage.setObject('myObject', {key1: 'value', key2: 'value2'});

// Accessing the object
localStorage.getObject('myObject')

本地存储(localStorage)在iOS和Android上都能正常工作吗?我在某处读到,Android存在一些问题? - Mutatos
1
你可以在它们两个上使用它,这是一个HTML5功能,兼容所有iOS和Android版本(http://caniuse.com/namevalue-storage)。 - davids
localStorage 的缺点是它只能存储字符串,而不能存储对象。因此,您需要存储序列化的对象(可能会有所不同),或者单独存储对象的属性。 - LetMyPeopleCode
最好将其包装在条件语句中。if (typeof(Storage) !== "undefined") { //执行操作} else{//尝试其他方法} - Faisal Naseer

3

我使用这种标签方法(自2014年以来),因为我只有1或2个项目要传递。您可以通过#标签将其传递,然后使用JS将结果拆分成数组...例如:

从URL:index.html#var1?var2

解析页面:

var str = str.window.location.hash.substr(1);
var res = str.split("?");
alert(res[0]+","+res[1]);

希望这能帮助到某个人。在我看来,LocalStorage和其他选项对于这种加载来说太过沉重。

1
我认为一种可能的方法是使用查询字符串在页面之间发送数据,您可以将它们附加到页面URL上,例如newpage.html?val=12。如果需要传递的数据量不大,则此方法比sqlite更轻巧。您还可以使用本地存储,它是键值对(与关系型的sqlite不同)。它比sqlite更易于实现(尽管不具有持久性)。
此外,您可能需要重新考虑是否真正需要多个HTML页面。像jQuery Mobile和Sencha Touch这样的框架可以很好地使用一个HTML页面,并将多个div作为应用程序屏幕。因此,您也可以尝试它们。

我使用了这种方法,因为我只有1或2个要传递。您可以通过#标签传递它,然后使用JS将结果拆分成数组... - jasonflaherty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接