从旧的cordova app恢复localStorage数据

时间:2014-10-20 12:10:17

标签: android ios cordova xamarin local-storage

我们正在将Cordova的应用程序移植到Xamarin.forms。现在,恢复旧版本在localStorage中保留的数据至关重要。

我试图在Xamarin中创建一个WebView,然后显示我需要的localStorage字段,但它似乎完全是空的。但是,如果我重新安装旧的cordova应用程序,它仍然可以访问数据,因此它肯定会存储并在安装Xamarin版本后继续存在。

Cordova文档提到了在某些平台上拥有自己的localStorage实现的一些内容,但对于哪些以及如何实现并不清楚。

基本上我正在寻找一种可靠地恢复android和iOS上的localStorage数据的方法。

我现在可以想到两个方向:

  • 将cordova嵌入xamarin.forms app
  • 提取正在进行本地存储的cordova部分并尝试使用简单的webview

3 个答案:

答案 0 :(得分:1)

对于iOS,我最终发现本地存储数据实际上仍在Library / WebKit / LocalStorage / file__0.localstorage中。但由于某些原因,Xamarin的webview无法提供数据。可能有一些摆弄你可以得到它(我认为它与基本网址的差异有关)。

由于我只需要数据,我已经用sqlite.NET直接打开了localstorage文件并以这种方式获取了数据。 (注意:它存储为Unicode的blob,因此不像你期望的那样存储UTF-8)

在Android上工作非常相似,但在某些情况下,数据是UTF-8,因此需要进行一些检测。 (在我的例子中:将它转换为两种方式并检查结果值是否看起来有点像有效的JSON)

答案 1 :(得分:0)

iOS上的一些细节FYI,LocalStorage在数据库中保存哪条路径

  1. Library/WebKit/LocalStorage/(UIWebView中)
  2. Library/Caches/(UIWebView中)
  3. Library/WebKit/WebsiteData/LocalStorage/(WKWebView)
  4. 然后打开数据库,执行查询SELECT key,value FROM ItemTable可以得到keyvalue。关键是NSString,值是NSData,用NSUTF16LittleEndianStringEncoding编码({{1}在Android上),使用代码转换为NSString:

    UTF-16LE

答案 2 :(得分:-1)

无法完成。不同app不同的元数据。这样做是不可能的。它基于每个本地存储的应用ID。