UIWebView вкл.кодирование /декодирование контента
Вопрос
Моя цель:чтобы продолжить веб-сеанс во время прерывания приложения (например.входящее SMS, которое прочитано).
Приблизиться К: Я попытался сохранить содержимое UIWebView в NSUserDefaults, вот так:
NSData *webViewData = [NSKeyedArchiver archivedDataWithRootObject:webView];
[[NSUserDefaults standardUserDefaults] setObject:webViewData forKey:kDefaultsWebViewObjectKey];
а затем восстановите его, как:
NSData *dta = [[NSUserDefaults standardUserDefaults] objectForKey:kDefaultsWebViewObjectKey];
webView = [NSKeyedUnarchiver unarchiveObjectWithData:dta];
но это не включает в себя содержание.
Подход В: Я также попытался получить содержимое UIWebView с помощью:
NSString *content = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML;"];
затем сохраняем его и извлекаем снова, а затем пытаемся установить его в UIWebView с помощью:
- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL
но JavaScript innerHTML возвращает не все содержимое.
Есть какие-нибудь идеи, предложения и т.д.?
Решение
В итоге я использовал NSURLRequests, а затем сохранил полученное тело HTTP и файлы cookie в NSUserDefaults.
После повторного входа в приложение я прочитал их и снова установил в UIWebView и в NSHTTPCookieStorage, а затем очистил NSUserDefaults для этих ключей.
Другие советы
Если ваш документ не ссылается ни на какие ресурсы (или делает это явно), вы должны быть в состоянии восстановить outerHTML:
NSString *content = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML;"];
Для максимально плавного взаимодействия вам также придется восстановить свойства прокрутки и масштабирования и отображать кэшированное представление во время загрузки webview