1

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

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

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 并未返回全部内容。

有什么想法、建议等吗?

4

2 回答 2

1

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

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

于 2009-06-01T05:17:20.517 回答
0

如果您的文档没有引用任何资源(或明确引用),您应该能够恢复外层HTML:

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

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

于 2009-05-27T14:30:01.967 回答