Как я могу очистить содержимое UIWebView/WKWebView?

У меня есть веб-просмотр, который можно циклически перебирать через разные URL-адреса. Когда я переключаюсь с одного на другой, я хочу, чтобы старая веб-страница исчезла, прежде чем загружать следующую. Как я могу это сделать без переопределения веб-просмотра?

Если я пытаюсь [self.webView loadHTMLString:@"" baseURL:nil]; и загружать свой URL-адрес в ту же функцию, предыдущая веб-страница все еще остается:

[self.webView loadHTMLString:@"" baseURL:nil];
[self.webView loadRequest:[NSURLRequest requestWithURL:self.pageURL]];

EDIT: это, по-видимому, недостаточно для вас. ниже код не очищает веб-просмотр, он отображает предыдущую страницу до загрузки новой:

- (void) startLoadOfNextURL:(NSURL*)url
{
    // clear:
    [self.webView loadHTMLString:@"" baseURL:nil]; //DOESNT WORK  

    // Load real next URL
    NSURLRequest* request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request];
}

Ответ 1

Вы можете загрузить пустую страницу

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];

Ответ 2

Вы можете написать код ниже, пока ваш контроллер не будет уволен.

webView.load(URLRequest(url: URL(string:"about:blank")!))

Ответ 3

Очистить старое содержимое веб-страницы

Когда вы вызываете - loadHTMLString:baseURL:, он не блокируется до завершения загрузки. Как только он запишет ваш запрос, он возвращается и загружается в фоновом режиме.

В результате вам нужно будет дождаться завершения первого загрузки, прежде чем начинать новый запрос на загрузку.

С UIWebView вы должны использовать UIWebViewDelegate - webViewDidFinishLoad:.

С помощью WKWebView вы должны использовать WKNavigationDelegate - webView:didFinishNavigation:

Другой подход, если вы действительно хотите очистить содержимое без метода делегата, будет использовать JavaScript (например, fooobar.com/questions/394550/...). Затем для UIWebView вы можете вызвать - stringByEvaluatingJavaScriptFromString:. Этот метод блокирует выполнение до тех пор, пока JavaScript не выполнит и не вернется.

Для WKWebView вам нужно сделать что-то вроде fooobar.com/questions/239457/..., поскольку его - evaluateJavaScript:completionHandler: не блокируется.

Чтобы "старое содержимое" исчезло

Если вы действительно хотите, чтобы "старая веб-страница исчезла", вы можете временно закрыть область содержимого веб-просмотра пустым UIView. Вы можете скрыть содержимое при запуске загрузки, а затем показать содержимое с помощью методов делегата выше после завершения загрузки.

Ответ 4

Вместо этого используйте JavaScript.

webView.evaluateJavaScript("document.body.remove()")

Ответ 5

Следующий код очищает экран и затем перемещается

стриж

webView.evaluateJavaScript("document.documentElement.remove()") { (_, _) in
    self.webView.load(urlRequest)
}