2015-10-20 13 views
6

Mam widok internetowy, który można przełączyć na różne adresy URL. Kiedy przełączam się z jednego na drugi, chcę, aby stara strona zniknęła przed załadowaniem następnej. Jak mogę to zrobić bez ponownego przydzielania widoku WWW?Jak mogę wyczyścić zawartość UIWebView/WKWebView?

Gdy próbuję [self.webView loadHTMLString:@"" baseURL:nil]; i załadować mój adres URL w tej samej funkcji poprzednia strona internetowa nadal pozostaje:

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

EDIT: to najwyraźniej nie jest wystarczająco jasne dla ciebie. Poniższy kod nie wyczyścić webview, wyświetla poprzednią stronę, aż nowa jest załadowany:

- (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

możesz pl. zapoznaj się z poniższym linkiem, który omawia sposób wyczyszczenia widoku internetowego http://stackoverflow.com/questions/6576154/how-to-clear-a-uiwebview – shri

+0

to nie odpowiada na moje pytanie – Halpo

+0

musisz wyczyścić starą stronę i załaduj nowy poprawnie, próbowałem poniższego podejścia wspomnianego linku i pomogło mi Spróbuj ustawić adres URL na około: puste i przeładować stronę. – shri

Odpowiedz

5

Można uczynić go załadować pustą stronę

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

Wiem, ale chcę wyczyścić podgląd strony internetowej, a następnie natychmiast załadować nową stronę – Halpo

+0

odpowiedź jest kluczem do twojego problemu. Po prostu załaduj 'about: blank' na * wyczyść * stronę, a następnie załaduj wszystko, co potrzebujesz. – Soberman

+3

ale nie mogę wykonać obu w tej samej funkcji (strona nie jest wyraźna, proszę po prostu przeczytaj moje pytanie) – Halpo

3

Aby wyczyścić stare zawartość WebView

Po wywołaniu - loadHTMLString:baseURL: nie blokuje się, dopóki ładowanie nie zostanie zakończone. Po zapisaniu żądania, zwraca i ładuje w tle.

W wyniku tego należy poczekać na zakończenie pierwszego obciążenia przed uruchomieniem nowego żądania ładowania.

Z UIWebView użyjesz UIWebViewDelegate 's - webViewDidFinishLoad:.

Z WKWebView byłoby użyć WKNavigationDelegate „s - webView:didFinishNavigation:

Innym podejściem, jeśli naprawdę chce wyczyścić zawartość bez metody delegata byłoby użyć JavaScript (np https://stackoverflow.com/a/4241420/3352624). Następnie dla UIWebView możesz wywołać - stringByEvaluatingJavaScriptFromString:. Ta metoda zablokuje wykonanie, dopóki JavaScript nie zostanie wykonany i nie powróci.

Dla modelu WKWebView należy wykonać czynność podobną do https://stackoverflow.com/a/30894786/3352624, ponieważ jego blok - evaluateJavaScript:completionHandler: nie jest blokowany.

Aby stare zawartość „zniknąć”

Jeśli naprawdę chcesz, aby „stary strona zniknąć”, można pokryć obszar zawartości w WebView z pustym UIView tymczasowo. Możesz ukryć zawartość podczas inicjowania obciążenia, a następnie pokazać zawartość za pomocą metod delegowania powyżej po zakończeniu ładowania.

4

Możesz pisać poniżej kod, gdy kontroler odrzuca.

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