2012-01-30 42 views

回答

4

我還沒有嘗試過的Mattias'的方式,但我只是直接訪問webkit本地存儲數據庫,然後導入iPhone SDK附帶的sqlite3庫以提取我需要的值。這是您訪問由PhoneGap創建的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]; 
} 
+0

不錯。你知道這是否由蘋果公司記錄嗎? – 2012-02-01 00:13:33

+0

沒有。我從iExplorer中打開PhoneGap應用程序並在myApp/WebKit/LocalStorage/file__0.localstorage中找到sqlite文件,我將更新我的答案以包含文件名。 – 2012-02-01 15:02:27

+1

僅供參考,但5.1,localStorage的位置更改爲在Library/Caches下生存。 – 2012-03-09 03:46:41

3

我不認爲目前有任何本地API用於訪問本地存儲,但您可以嘗試使用一些將本地存儲轉儲爲JSON的JavaScript創建Web視圖。

創建UIWebView具有UIWebViewDelegate委託,它實現了webViewDidFinishLoad:方法和使用方法stringByEvaluatingJavaScriptFromString:觸發轉儲。

事情是這樣的,第一頁在Web視圖加載:

<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 
}