Ответ 1
Вы можете загрузить пустую страницу
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
У меня есть веб-просмотр, который можно циклически перебирать через разные 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];
}
Вы можете загрузить пустую страницу
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
Вы можете написать код ниже, пока ваш контроллер не будет уволен.
webView.load(URLRequest(url: URL(string:"about:blank")!))
Когда вы вызываете - 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. Вы можете скрыть содержимое при запуске загрузки, а затем показать содержимое с помощью методов делегата выше после завершения загрузки.
Вместо этого используйте JavaScript.
webView.evaluateJavaScript("document.body.remove()")
Следующий код очищает экран и затем перемещается
стриж
webView.evaluateJavaScript("document.documentElement.remove()") { (_, _) in
self.webView.load(urlRequest)
}