Stiamo passando da PhoneGap a un'app per iPhone veramente nativa e abbiamo bisogno di accedere ai dati utente memorizzati nella memoria locale HTML5 creata da PhoneGap. Come otteniamo tali dati in modo che possiamo creare un processo di aggiornamento senza interruzioni per l'utente?Come accedere alla memoria locale HTML5 creata da PhoneGap su iOS?
5
A
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];
}
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
}
Nice. Sai se questo è documentato da Apple da qualche parte? –
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. –
Solo per FYI, ma con 5.1, la posizione di localStorage cambia in live sotto Library/Caches. –