UIWebView вкл. кодирование / декодирование контента - PullRequest
1 голос
/ 27 мая 2009

Моя цель: продолжить веб-сеанс через прерывание приложения (например, входящее SMS, которое читается).

Подход 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

но JavaScript-код innerHTML не возвращает весь контент.

Любые идеи, предложения и т.д.?

Ответы [ 2 ]

1 голос
/ 01 июня 2009

В итоге я использовал NSURLRequests, а затем сохранил полученное тело HTTP и куки в NSUserDefaults.

После повторного входа в приложение я прочитал их и снова установил в UIWebView и в NSHTTPCookieStorage, а затем очистил NSUserDefaults для этих ключей.

0 голосов
/ 27 мая 2009

Если ваш документ не ссылается ни на какие ресурсы (или делает это явно), вы сможете восстановить externalHTML:

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

Для более плавного восприятия вам также потребуется восстановить свойства прокрутки и масштабирования и показать кэшированное представление во время загрузки веб-вида

...