2012-01-30 17 views
5

PhoneGapから真のネイティブiPhoneアプリに移行しており、PhoneGapで作成されたHTML5ローカルストレージに保存されているユーザーデータにアクセスする必要があります。ユーザーにシームレスな更新プロセスを作成できるように、そのデータをどのように入手するのですか?iOSのPhoneGapで作成されたHTML5ローカルストレージにアクセスするにはどうすればよいですか?

答えて

4

だけWebkitのローカルストレージデータベースに直接アクセスし、必要な値を抽出するためにiPhone SDKに含まれているsqlite3ライブラリをインポートしました。これは、PhoneGapで作成したローカルストレージにアクセスする方法です。

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

ニース。これがAppleによってどこかで文書化されているかどうか知っていますか? –

+0

iExplorerでPhoneGapアプリを開き、myApp/WebKit/LocalStorage/file__0.localstorageにsqliteファイルを見つけるパスを取得しました。ファイル名を含めるように答えを更新します。 –

+1

5.1では、localStorageの場所がLibrary/Cachesに変更されています。 @KerriShottsありがとう。 –

3

現在ローカルストレージにアクセスするためのネイティブAPIはありませんが、ローカルストレージをJSONなどにダンプするJavaScriptを使用してウェブビューを作成しようとする可能性があります。

webViewDidFinishLoad:メソッドを実装し、ダンプをトリガーするstringByEvaluatingJavaScriptFromString:メソッドを使用していますUIWebViewDelegateデリゲートを持っているUIWebViewを作成します。このような

何か、最初のページには、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 
} 
関連する問題