2012-01-30 4 views

Respuesta

4

No he probado manera Mattias' pero acabo Accedí directamente a la base de datos de almacenamiento local de webkit y luego importé la lib sqlite3 incluida con el iPhone SDK para extraer los valores que necesitaba. Así es como accede a localstorage creado por 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. ¿Sabes si esto está documentado por Apple en alguna parte? –

+0

No. Obtuve el camino de abrir mi aplicación PhoneGap en iExplorer y encontrar un archivo sqlite en myApp/WebKit/LocalStorage/file__0.localstorage. Actualizaré mi respuesta para incluir el nombre del archivo. –

+1

Solo para su información, pero con 5.1, la ubicación de localStorage cambia a vivir bajo Library/Caches. –

3

No creo que actualmente exista ninguna API nativa para acceder al almacenamiento local, pero podría tratar de crear una vista web con algunos JavaScript que vuelque el almacenamiento local, es decir, JSON.

Crear una UIWebView que tiene un delegado UIWebViewDelegate que implementa el método webViewDidFinishLoad: y utiliza el método stringByEvaluatingJavaScriptFromString: para desencadenar un vertedero.

Algo como esto, en primer lugar la página se cargue en la vista 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> 

Entonces el acabado método delegado de carga:

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