UIWebView вкл.кодирование /декодирование контента

StackOverflow https://stackoverflow.com/questions/915366

  •  06-09-2019
  •  | 
  •  

Вопрос

Моя цель:чтобы продолжить веб-сеанс во время прерывания приложения (например.входящее 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top