UIWebView包含内容编码/解码

时间:2009-05-27 12:11:45

标签: iphone uiwebview nscoding

我的目标:在应用程序中断期间继续进行网络会话(例如,读取的传入短信)。

方法A: 我试图在NSUserDefaults中存储UIWebView的内容,如下所示:

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

然后将其恢复为:

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

但不包括内容。

方法B: 我也试过用以下内容获取UIWebView的内容:

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

然后存储它,然后再次检索它,然后尝试在UIWebView中设置它:

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

但是innerHTML javascript没有返回整个内容。

任何想法,建议等?

2 个答案:

答案 0 :(得分:1)

我最终使用NSURLRequests,然后将检索到的HTTP正文和cookie存储到NSUserDefaults。

重新进入应用程序后,我阅读了这些内容并在UIWebView和NSHTTPCookieStorage中再次设置它们,然后清除这些密钥的NSUserDefaults。

答案 1 :(得分:0)

如果您的文档没有引用任何资源(或明确地这样做),您应该能够恢复outerHTML:

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

为了获得最流畅的体验,您还必须恢复滚动和缩放属性,并在加载webview时显示缓存的表示