2012-01-30 4 views

risposta

4

Non ho provato modo Mattias', ma ho solo accedi direttamente al database di archiviazione locale del webkit e poi importa la libreria sqlite3 inclusa con l'SDK di iPhone per estrarre i valori necessari. Ecco come accedere a localstorage creato da 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

Nice. Sai se questo è documentato da Apple da qualche parte? –

+0

No. Ho ottenuto il percorso dall'aprire la mia app PhoneGap in iExplorer e trovare un file sqlite in myApp/WebKit/LocalStorage/file__0.localstorage Aggiornerò la mia risposta per includere il nome del file. –

+1

Solo per FYI, ma con 5.1, la posizione di localStorage cambia in live sotto Library/Caches. –

3

Non penso che al momento ci sia alcuna API nativa per accedere all'archiviazione locale ma si potrebbe provare a creare una vista Web con JavaScript che scarichi la memoria locale su JSON.

Creare un UIWebView che ha un delegato UIWebViewDelegate che implementa il metodo webViewDidFinishLoad: e utilizza il metodo stringByEvaluatingJavaScriptFromString: per innescare una discarica.

Qualcosa di simile, prima pagina per caricare la visualizzazione 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> 

Poi la finitura metodo load delegato:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    NSString *localStorageAsJSON = [webView stringByEvaluatingJavaScriptFromString:@"dumpLocalStorageToJSON();"]; 
    // parse JSON and do something useful 
}