2015-10-20 121 views
6

我有一个webview可以通过不同的URL循环。当我从一个切换到另一个时,我希望旧的网页在加载下一个之前消失。我怎样才能做到这一点,而无需重新分配webview?如何清除UIWebView/WKWebView的内容?

如果我尝试[self.webView loadHTMLString:@"" baseURL:nil];和加载我的网址在同一个函数之前的网页仍然存在:

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

编辑:这显然是不适合你不够清楚。下面的代码不会清除web视图,它显示的前一页,直到新的加载:

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

可以吗?请参阅下面的链接,讨论如何清除webview http://stackoverflow.com/questions/6576154/how-to-clear-a-uiwebview – shri

+0

它不回答我的问题 – Halpo

+0

你需要清除旧的网页和加载新的权利,我已经尝试了下面的方法提到了一个链接,它已经帮助我尝试将URL设置为about:blank并重新加载页面。 – shri

回答

5

你可以把它装入一个空白页

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

我知道,但我想清楚了的WebView然后立即加载新的页面 – Halpo

+0

这答案是你的问题的关键。只需加载'about:blank'即可*清除*页面,然后加载任何您需要的内容。 – Soberman

+3

但我不能在同一个函数一举两得(页面犯规清楚,请刚才读我的问题) – Halpo

3

要清除的WebView的旧内容

当您致电- loadHTMLString:baseURL:它不阻塞,直到加载完成。一旦它记录你的请求,它就会返回并加载到后台。

因此,您需要等待第一个加载完成才能启动新的加载请求。您可以使用UIWebViewDelegate- webViewDidFinishLoad:

随着WKWebView你可以使用WKNavigationDelegate - webView:didFinishNavigation:

另一种方法,如果你真的想清楚的内容没有代理的方法是使用JavaScript(如https://stackoverflow.com/a/4241420/3352624)。然后,对于UIWebView,您可以调用- stringByEvaluatingJavaScriptFromString:。该方法将阻止执行,直到JavaScript执行并返回。

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

为了使旧的内容“消失”

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

4

您可以在控制器解散时写下面的代码。

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