如何通过phonegap在html文件之间传递数据而不是技术上在同一个域上?

时间:2014-08-14 17:36:57

标签: cordova storage persist lawnchair

编辑 - 8-15

要优化我的问题:

1.。)我可以使用localStorage在同一个应用程序中的两个webview之间传递数据吗?如果没有更好的解决方案?

2.。)我可以在远程域和本地android文件之间使用localStorage吗?如果没有更好的解决方案?

3.。)localStorage是否使用cookies?这与DOM适配器相同吗?我看过很多解释,有些似乎是矛盾的,所以我觉得我对实际发生的事情感到有些困惑。


我正在使用phonegap和apppresser创建移动应用程序。从本质上讲,它只是一个webview,我有两个版本,在线和离线。在线版本发送到www / index.html,然后将其重定向到我的实时网站。离线版本是assets / offline.html,我将使其看起来与在线版本类似,因此除了不能再进行在线功能外,用户并不知道任何事情本质上是不同的。

长话短说,我正在尝试使用草坪椅,因为我只看到了很好的评论,看起来非常灵活。让我用草坪椅作为前言似乎有用。我已经尝试了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。)草坪椅是否允许我在webview中的域之间保存相同移动应用程序的数据?我不确定domiain offline.html会是什么,但技术上index.html(在线版本)是在mydomain.com上设置数据

2。)在这种情况下我是否应该使用更好的技术来保存html文件和/或域之间的数据?

1 个答案:

答案 0 :(得分:0)

目前,这是我找到的最佳解决方案。为了重新迭代,我使用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>

还有解释:

function checkNetConnection检查互联网连接。如果它存在,我使用$ .get ping我的wordpress网站,我在我的网站上安装了JSON API插件。我使用JSON API检索帖子数据并在应用程序在线时缓存它,因为这些数据通常似乎在应用程序重新启动之间持续存在(这使我相信答案为&#34;我可以在同一个应用程序中的两个Web视图之间传递数据使用localStorage?&#34;和&#34;我可以在远程域和本地android文件之间使用localStorage吗?&#34;不是。)

如果应用程序不在线,那么我只是尝试获取已经缓存的数据。

<强>优点:

  • 持久数据
  • 离线模式,解决方案通常不支持

<强>缺点:

  • 在加载实际页面之前必须等待$ .get完成,这可能导致应用程序启动感觉有点慢,页面的初始html显示,直到$ .get结束(我希望减轻使用闪屏面具)
  • 用户必须至少使用一次互联网连接到应用程序(如果没有可用的缓存,我希望通过使用静态内容来缓解)
  • 可自定义的解决方案与即插即用

这是我的自定义解决方案。它将适用于我公司的需求。我不能保证它会对其他人有同样的作用。