2015-10-20 119 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")!))