Очистить содержимое UIWebView при отключении модального вида (iPhone OS 3.0)
В настоящее время у меня есть UIWebView, который отображается в модальном виде. Это в основном подробный вид, который обеспечивает просмотр страницы, когда пользователь нажимает на ссылку. Когда представление отклоняется и затем снова появляется (когда пользователь нажимает на другую ссылку), ранее загруженный контент все еще отображается, а новое содержимое загружается "сверху" последнего содержимого. Это имеет смысл, поскольку экземпляр UIWebView сохраняется между сеансами и освобождается только тогда, когда требуется память.
Однако я хотел бы полностью очистить UIWebView, когда модальное представление отклонено, так что 1) содержимое очищается и 2) память освобождается. До сих пор мои исследования и попытки не нашли ответа. Эти ссылки не работали для меня:
Я пробовал [[NSURLCache sharedURLCache] removeAllCachedResponses];
и установил webView в ноль и вручную освободил webView при отключении модального просмотра - безрезультатно. Любые мысли из размороженных масс?
Ответы
Ответ 1
Освобождение веб-представления, вероятно, лучший подход. Если представление находится в иерархии представлений (имеет супервизор), вы должны вызвать removeFromSuperview, чтобы заставить супервизор освободить представление.
Вы также можете загрузить строку html для пустого документа:
[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil];
Ответ 2
Иногда loadHTMLString
работает слишком медленно. Вы также можете использовать:
[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML = \"\";"];
Я не уверен, что это освободит много памяти, хотя...
Ответ 3
Похоже, что при некоторых обстоятельствах методы, предложенные drawonward и rob, могут не работать (возможно, что-то делать с CSS на очищаемой странице), однако это действительно работало:
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
Ответ 4
оценка javascript обычно быстрее, чем загрузка нового запроса.
[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"];
Ответ 5
В моем случае мне нужно было мгновенно очистить веб-представление от его содержимого и сразу же начать загружать что-то другое. Ни загрузка пустой HTML-строки документа, ни очистка страницы с помощью JavaScript не привели к желаемому эффекту. Вместо этого я использовал:
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://stackoverflow.com"]]];
И это очистило представление до фона по умолчанию и инициировало загрузку следующей страницы, как ожидалось.
Я надеюсь, что это тоже поможет кому-то другому.
Ответ 6
Я предпочитаю следующее:
[m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"]