简体   繁体   中英

how can I clear the contents of a UIWebView/WKWebView?

I have a webview that can be cycled through different URLs. When I switch from one to the other I want the old web page to disappear before loading the next one. How can I do this without re allocating the webview?

If I try to [self.webView loadHTMLString:@"" baseURL:nil]; and load my URL in the same function the previous web page still remains:

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

EDIT: this apparently isn't clear enough for you. the below code doesn't clear the webview, it displays the previous page until the new one is loaded:

- (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.load(URLRequest(url: URL(string:"about:blank")!))

你可以让它加载一个空白页面

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

The following code clears the screen and then navigates

Swift

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

To clear old contents of webview

When you call - loadHTMLString:baseURL: it doesn't block until the load is complete. Once it records your request, it returns and loads in the background.

As a result, you would need to wait for the first load to finish before kicking off a new load request.

With UIWebView you would use UIWebViewDelegate 's - webViewDidFinishLoad: .

With WKWebView you would use WKNavigationDelegate 's - webView:didFinishNavigation:

Another approach if you really wanted to clear the contents without a delegate method would be to use JavaScript (eg https://stackoverflow.com/a/4241420/3352624 ). Then for UIWebView you could invoke - stringByEvaluatingJavaScriptFromString: . That method will block execution until the JavaScript executes and returns.

For WKWebView , you would need to do something like https://stackoverflow.com/a/30894786/3352624 since its - evaluateJavaScript:completionHandler: doesn't block.

To make old contents "disappear"

If you really just want to make "the old web page to disappear", you could cover the content area of the webview with a blank UIView temporarily. You could hide the contents when you initiate the load and then show the contents using the delegate methods above after the load completes.

改用 JavaScript。

webView.evaluateJavaScript("document.body.remove()")

Swift

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM