UIWebView incl. codifica del contenuto / decodifica
Domanda
Il mio obiettivo: continuare una sessione Web attraverso un'interruzione app (ad esempio SMS in arrivo che viene letta.)
.Approccio A: Ho cercato di memorizzare il contenuto di un UIWebView in NSUserDefaults, in questo modo:
NSData *webViewData = [NSKeyedArchiver archivedDataWithRootObject:webView];
[[NSUserDefaults standardUserDefaults] setObject:webViewData forKey:kDefaultsWebViewObjectKey];
e quindi ripristinare le cose come:
NSData *dta = [[NSUserDefaults standardUserDefaults] objectForKey:kDefaultsWebViewObjectKey];
webView = [NSKeyedUnarchiver unarchiveObjectWithData:dta];
, ma che non include il contenuto.
Approccio B: Ho anche provato ottenere i contenuti del UIWebView con:
NSString *content = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML;"];
poi riporlo, e il recupero di nuovo, e poi cercando di impostarlo nel UIWebView con:
- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL
, ma il javascript innerHTML non restituisce l'intero contenuto.
Tutte le idee, suggerimenti, ecc.?
Soluzione
Ho finito per usare NSURLRequests, e quindi la conservazione del corpo HTTP recuperato e biscotti a NSUserDefaults.
Dopo il rientro al app che ho letto questi e impostare di nuovo su un UIWebView e nel NSHTTPCookieStorage, e quindi cancellare i NSUserDefaults per queste chiavi.
Altri suggerimenti
Se il documento non fa riferimento a tutte le risorse (o lo fa in modo così esplicito), si dovrebbe essere in grado di ripristinare l'outerHTML:
NSString *content = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML;"];
Per l'esperienza più regolare si dovrà ripristinare anche le proprietà di scorrimento e di zoom e mostra una rappresentazione nascosta mentre il WebView sta caricando