EDIT - 8-15
精炼我的问题:
1)。我可以在同一个应用程序中使用localStorage传递两个webview之间的数据吗?如果没有,有没有更好的解决方案?
2)。我可以在远程域和本地android文件之间使用localStorage吗?如果没有,有没有更好的解决方案?
3)。localStorage使用cookie吗?这与DOM适配器相同吗?我看过很多解释,有些看起来很矛盾,所以我觉得我对到底发生了什么有点困惑。
我正在使用phonegap和apppresser创建一个移动应用程序。本质上,它只是一个网络视图,我有两个版本,一个是在线的,一个是离线的。在线版本被发送到www/index.html,然后重定向到我的现场网站。离线版本是assets/offline.html,我要让它看起来与在线版本相似,这样用户就不会真正知道任何本质上的不同,除了他们不能再做在线功能。
长话短说,我正在尝试使用lawnchair,因为我只看到了关于它的好评,它似乎很灵活。让我先说,"躺椅"似乎管用。我已经尝试了dom适配器,可以成功地设置和检索页面之间的数据在在线版本上,但它似乎不能在离线版本上检索。下面是我用来成功完成此操作的代码:
var store = new Lawnchair({
adapter: "dom",
name: "testing"
}, function(store) {
});
store.exists('events', function(available){
var preStr = "";
if(available){
preStr = "key is already available, ";
}else{
preStr = "key not available, ";
}
// create an object
var me = <?php echo json_encode($json_posts); ?>;
// save it
store.save(me);
// access it later... even after app restart!
store.get('events', function(me) {
$("#data").html(preStr + JSON.stringify(me));
alert(preStr + JSON.stringify(me));
});
});
,我使用了一个稍微不同的离线版本,它不保存任何数据。所以这可以归结为几个问题:
1)。lawnchair允许我在webview域之间的同一移动应用程序上持久化数据吗?我不确定什么域名离线。html将上,但技术上index.html(在线版本)是设置数据在mydomain.com
2)。在这种情况下,我应该使用更好的技术来在html文件和/或域之间持久化数据吗?
目前,这是我找到的最佳解决方案。重申一下,我正在使用phonegap和apppresser,这使我的wordpress网站看起来像一个移动应用程序。
在index.html中,我的代码如下:<script src="jquery-2.0.2.js"></script>
<script src="lawnchair-0.6.1.js"></script>
<script type="text/javascript">
function checkNetConnection(){
var xhr = new XMLHttpRequest();
var file = "http://example.com";
var r = Math.round(Math.random() * 10000);
xhr.open('HEAD', file + "?subins=" + r, false);
try {
xhr.send();
if (xhr.status >= 200 && xhr.status < 304) {
return true;
} else {
return false;
}
} catch (e) {
return false;
}
}
if(checkNetConnection()){
var store = new Lawnchair({
adapter: "dom",
name: "cachedvalues"
}, function(store) {
});
// create an object
$.get("http://example.com/api/get_posts/?post_type=event&ondate=2014-09-14",function(data){
data.key = "events";
alert(data);
alert(data.key);
store.save(data);
window.location = "http://example.com?appp=1";
});
}else{
var store = new Lawnchair({
adapter: "dom",
name: "cachedvalues"
}, function(store) {
});
store.exists('events', function(available){
var preStr = "";
if(available){
preStr = "key is already available, ";
}else{
preStr = "key not available, ";
}
// access it later... even after app restart!
store.get('events', function(me) {
alert(preStr + JSON.stringify(me));
});
});
}
</script>
还有解释:
函数checkNetConnection检查是否有internet连接。如果它存在,我使用$ ping我的wordpress站点。get和我有JSON API插件安装在我的网站上。我检索使用JSON API的post数据和缓存它,如果应用程序是在线的,因为这些数据通常似乎在应用程序重启之间持续存在(这让我相信的答案"我可以在两个webview之间传递数据在同一个应用程序使用localStorage?"one_answers"我可以在远程域和本地android文件之间使用localStorage吗?"都没有)。
如果应用程序不在线,那么我只是尝试获取已经缓存的数据。
优点:
- 持久数据
- 离线模式的解决方案,通常不支持它
缺点:
- 必须等待$。在加载实际页面之前完成,这可能会导致应用程序启动感觉有点慢,并且页面的初始HTML显示到$。完成(我希望使用闪屏遮罩来缓解)
- 用户必须至少有一次使用互联网连接的应用程序(如果没有可用的缓存,我希望通过使用静态内容来缓解)
- 可定制的解决方案vs.即插即用
这是我自定义的解决方案。这将满足我公司的需要。我不能保证对其他人也同样有效。