如何清除 UIWebView/WKWebView 的内容?
Posted
技术标签:
【中文标题】如何清除 UIWebView/WKWebView 的内容?【英文标题】:how can I clear the contents of a UIWebView/WKWebView? 【发布时间】:2016-01-18 22:43:37 【问题描述】:我有一个可以通过不同 URL 循环的 webview。当我从一个切换到另一个时,我希望旧网页在加载下一个之前消失。如何在不重新分配 webview 的情况下做到这一点?
如果我尝试[self.webView loadhtmlString:@"" baseURL:nil];
并在同一函数中加载我的 URL,则之前的网页仍然存在:
[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];
【问题讨论】:
你能请教一下吗?请参阅下面的链接,该链接讨论了如何清除 webview ***.com/questions/6576154/how-to-clear-a-uiwebview 它没有回答我的问题 您需要清除旧网页并正确加载新网页,我尝试了以下提到链接的方法,它帮助我尝试将 URL 设置为 about:blank 并重新加载页面。 再次阅读我的问题 - 我想清除页面并立即加载网页,即(网页 -> 点击 -> 空白 -> 新页面) @CarienvanZyl 我认为唯一可靠的方法是重新初始化网络视图 【参考方案1】:您可以在控制器关闭时编写以下代码。
webView.load(URLRequest(url: URL(string:"about:blank")!))
【讨论】:
【参考方案2】:你可以让它加载一个空白页面
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
【讨论】:
我知道,但我想清除网页视图然后立即加载新页面 这个答案是解决您问题的关键。只需将about:blank
加载到 clear 页面,然后加载您需要的任何内容。
但是我不能在同一个函数中做这两个(页面不清晰,请阅读我的问题)【参考方案3】:
以下代码清屏然后导航
斯威夫特
webView.evaluatejavascript("document.documentElement.remove()") (_, _) in
self.webView.load(urlRequest)
【讨论】:
【参考方案4】:改用 JavaScript。
webView.evaluateJavaScript("document.body.remove()")
【讨论】:
【参考方案5】:清除webview的旧内容
当您调用- loadHTMLString:baseURL:
时,它不会阻塞,直到加载完成。一旦它记录了您的请求,它就会返回并在后台加载。
因此,您需要等待第一次加载完成后才能启动新的加载请求。
对于UIWebView
,您将使用UIWebViewDelegate
's
- webViewDidFinishLoad:
.
使用 WKWebView,您将使用 WKNavigationDelegate
's
- webView:didFinishNavigation:
如果您真的想在没有委托方法的情况下清除内容,另一种方法是使用 JavaScript(例如https://***.com/a/4241420/3352624)。然后对于 UIWebView,您可以调用 - stringByEvaluatingJavaScriptFromString:
。该方法将阻止执行,直到 JavaScript 执行并返回。
对于WKWebView
,您需要执行https://***.com/a/30894786/3352624 之类的操作,因为它的- evaluateJavaScript:completionHandler:
不会阻塞。
使旧内容“消失”
如果你真的只是想让“旧网页消失”,你可以暂时用一个空白的 UIView 覆盖 webview 的内容区域。您可以在启动加载时隐藏内容,然后在加载完成后使用上面的委托方法显示内容。
【讨论】:
【参考方案6】:斯威夫特
webView.load(URLRequest(url: URL(string: "about:blank")!))
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute:
//Load request or write code here
)
【讨论】:
以上是关于如何清除 UIWebView/WKWebView 的内容?的主要内容,如果未能解决你的问题,请参考以下文章
UIWebview/WKWebView javascript调用处理两个返回值?