我如何在html文件之间传递数据,而不是在技术上与phonegap在同一域



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.即插即用

这是我自定义的解决方案。这将满足我公司的需要。我不能保证对其他人也同样有效。

相关内容

最新更新