Estamos haciendo la transición de PhoneGap a una aplicación de iPhone verdaderamente nativa y necesitamos acceder a los datos de los usuarios almacenados en el almacenamiento local HTML5 creado por PhoneGap. ¿Cómo podemos obtener esos datos para poder crear un proceso de actualización sin interrupciones para el usuario?¿Cómo accedo al almacenamiento local HTML5 creado por PhoneGap en iOS?
Respuesta
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];
}
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
}
- 1. Almacenamiento local HTML5 y Chrome
- 2. Almacenamiento local HTML5 no persistente
- 3. Almacenamiento Thread-Local y iOS
- 4. ¿En qué se diferencia indexedDB conceptualmente del almacenamiento local HTML5?
- 5. Phonegap local storage
- 6. Solución de persistencia para móvil Phonegap/HTML5 App
- 7. iOS PhoneGap aplicación rechazada por el uso de localStorage
- 8. PhoneGap iOS + DOM Exception 18
- 9. HTML 5 almacenamiento local
- 10. ¿Cómo accedo a la brújula en iOS?
- 11. datos de importación/exportación almacenamiento local de HTML5
- 12. local Almacenamiento y bloqueo
- 13. almacenamiento local y almacenamiento de sesión
- 14. ¿Para qué puedes usar el almacenamiento local de HTML5?
- 15. Almacenamiento de archivos de audio en html5 almacenamiento local-descarga de archivos de audio con javascript
- 16. Response.redirect mata el almacenamiento local?
- 17. Rails 3/PhoneGap: ¿Cómo convertir una aplicación de Rails en una aplicación de iOS Phonegap?
- 18. iOS PhoneGap debug Workflow
- 19. Phonegap/Cordova IOS paisaje vídeo
- 20. ¿Cómo puedo obtener los valores de almacenamiento local HTML5 en el lado del servidor
- 21. Accediendo a LocalStorage cuando se presiona el botón de inicio en Phonegap/iOS
- 22. PhoneGap/iOS LocalNotification App Se bloquea al tocar "Ver"
- 23. ¿Cómo guardar archivos html, javascript y css en el almacenamiento local html5?
- 24. Almacenamiento local y JSON
- 25. Desarrollar la aplicación iOS con Phonegap * por completo * en Ubuntu?
- 26. HTML5 SQLite vs Native Database en caso de PhoneGap
- 27. ¿Cómo accedo a un árbol de análisis sintáctico creado por XML :: Parser?
- 28. ¿Cómo funciona phoneGap (Cordova) internamente, iOS específica
- 29. Almacenamiento en caché sin conexión en HTML5
- 30. PhoneGap iOS app notablemente lento?
Nice. ¿Sabes si esto está documentado por Apple en alguna parte? –
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. –
Solo para su información, pero con 5.1, la ubicación de localStorage cambia a vivir bajo Library/Caches. –