如何清除UIWebView / WKWebView的内容?

时间:2015-10-20 10:11:22

标签: ios wkwebview

我有一个可以通过不同的URL循环的webview。当我从一个切换到另一个时,我希望旧网页在加载下一个之前消失。如何在不重新分配webview的情况下执行此操作?

如果我尝试[self.webView loadHTMLString:@"" baseURL:nil];并在同一功能中加载我的网址,那么之前的网页仍然存在:

[self.webView loadHTMLString:@"" baseURL:nil];
[self.webView loadRequest:[NSURLRequest requestWithURL:self.pageURL]];
编辑:这显然不够清楚。以下代码不清除webview,它会显示上一页,直到加载新页面为止:

- (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];
}

6 个答案:

答案 0 :(得分:7)

您可以加载空白页

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

答案 1 :(得分:7)

您可以在控制器解雇时写下以下代码。

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

答案 2 :(得分:3)

清除webview的旧内容

当您致电- loadHTMLString:baseURL:时,在加载完成之前它不会阻止。一旦它记录了您的请求,它就会在后台返回并加载。

因此,在开始新的加载请求之前,您需要等待第一次加载完成。

使用UIWebView,您将使用UIWebViewDelegate - webViewDidFinishLoad:

使用WKWebView,您可以使用WKNavigationDelegate的{​​{1}}

如果你真的想在没有委托方法的情况下清除内容,另一种方法是使用JavaScript(例如https://stackoverflow.com/a/4241420/3352624)。然后,对于UIWebView,您可以调用 - webView:didFinishNavigation:。该方法将阻止执行,直到JavaScript执行并返回。

对于- stringByEvaluatingJavaScriptFromString:,您需要执行https://stackoverflow.com/a/30894786/3352624之类的操作,因为其WKWebView不会阻止。

使旧内容“消失”

如果你真的只想让“旧网页消失”,你可以暂时用空白的UIView覆盖webview的内容区域。您可以在启动加载时隐藏内容,然后在加载完成后使用上面的委托方法显示内容。

答案 3 :(得分:0)

改为使用JavaScript。

library(tidyverse)
df1 %>% 
   mutate(num_days = case_when(str_detect(num_days, "Y|M") ~ 
    as.numeric(str_extract(num_days, "\\d+(?=Y)") ) * 365 + 
        replace_na(as.numeric(str_extract(num_days, "\\d+(?=M)")) * 30, 0), 
     TRUE ~ as.numeric(num_days) ))

答案 4 :(得分:0)

以下代码清除屏幕,然后导航

快速

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

答案 5 :(得分:0)

快速

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

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
   //Load request or write code here
})