2009-05-27 5 views
1

Mon objectif: poursuivre une session Web en cas d'interruption d'une application (par exemple, SMS entrant lu).UIWebView incl. codage/décodage de contenu

Approche A: J'ai essayé de stocker le contenu d'un UIWebView dans NSUserDefaults, comme ceci:

NSData *webViewData = [NSKeyedArchiver archivedDataWithRootObject:webView]; 
[[NSUserDefaults standardUserDefaults] setObject:webViewData forKey:kDefaultsWebViewObjectKey]; 

puis restaurer comme:

NSData *dta = [[NSUserDefaults standardUserDefaults] objectForKey:kDefaultsWebViewObjectKey]; 
webView = [NSKeyedUnarchiver unarchiveObjectWithData:dta]; 

mais cela ne inclure le contenu.

Approche B: J'ai aussi essayé d'obtenir le contenu du UIWebView avec:

NSString *content = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML;"]; 

puis le stocker et le récupérer à nouveau, puis essayer de le mettre dans le UIWebView avec:

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL

mais le javascript innerHTML ne retourne pas tout le contenu.

Des idées, des suggestions, etc.?

Répondre

1

J'ai fini par utiliser NSURLRequests, puis stocker le corps HTTP récupéré et les cookies dans NSUserDefaults.

Après la ré-entrée dans l'application, je les lis et les redéfinit sur un UIWebView et dans le NSHTTPCookieStorage, puis efface les NSUserDefaults pour ces clés.

0

Si votre document ne fait référence à aucune ressource (ou ne explicitement), vous devriez être en mesure de restaurer la outerHTML:

NSString *content = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML;"]; 

Pour l'expérience plus douce, vous devrez également restaurer le défilement et le zoom propriétés et afficher une représentation mise en cache pendant le chargement du webview

+0

malheureusement que retourner une chaîne vide –

+0

Oups, il devrait être document.documentElement.outerHTML – rpetrich