如何访问iOS上由PhoneGap创build的HTML5本地存储?
我们正在从PhoneGap过渡到真正的本机iPhone应用程序,我们需要访问存储在由PhoneGap创build的HTML5本地存储中的用户数据。 我们如何获得这些数据,以便我们可以为用户创build一个无缝的更新过程?
我还没有尝试过Mattias的方式,但是我直接访问了webkit本地存储数据库,然后导入了包含在iPhone SDK中的sqlite3库以提取我需要的值。 这就是你如何访问由PhoneGap创build的localstorage:
NSString *databaseName = @"file__0.localstorage"; //Get Library path NSArray *libraryPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *libraryDir = [libraryPaths objectAtIndex:0]; NSString *databasePath = [libraryDir stringByAppendingPathComponent:@"WebKit/LocalStorage/"]; NSString *databaseFile = [databasePath stringByAppendingPathComponent:databaseName]; BOOL webkitDb; NSFileManager *fileManager = [NSFileManager defaultManager]; webkitDb = [fileManager fileExistsAtPath:databaseFile]; if (webkitDb) { MMWebKitLocalStorageController* wkc = [[MMWebKitLocalStorageController alloc] init]; [wkc updateUserFromLocalStorage:databaseFile]; }
我不认为目前有任何本地API访问本地存储,但你可以尝试创build一个Web视图与一些JavaScript转储本地存储,即JSON。
创build一个具有实现webViewDidFinishLoad:
方法的UIWebViewDelegate
委托的UIWebViewDelegate
,并使用stringByEvaluatingJavaScriptFromString:
方法触发转储。
就像这样,首先要在网页视图中加载页面:
<html> <head> <script> // download and insert JSON-js here // https://github.com/douglascrockford/JSON-js function dumpLocalStorageToJSON() { d = {}; for(i = 0; i < localStorage.length; i++) d[localStorage.key(i)] = localStorage.getItem(localStorage.key(i)); return JSON.stringify(d); } </script> </head> </html>
然后完成加载委托方法:
- (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *localStorageAsJSON = [webView stringByEvaluatingJavaScriptFromString:@"dumpLocalStorageToJSON();"]; // parse JSON and do something useful }