ios 如何清除UIWebView/WKWebView的内容?

lvjbypge  于 2023-02-06  发布在  iOS
关注(0)|答案(6)|浏览(264)

我有一个可以在不同网址之间循环的网页视图。当我从一个网址切换到另一个网址时,我希望旧网页在加载下一个网页之前消失。我如何在不重新分配网页视图的情况下做到这一点?
如果我尝试[self.webView loadHTMLString:@"" baseURL:nil];并在同一个函数中加载我的URL,则之前的网页仍然存在:

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

EDIT:这显然对你来说还不够清楚。下面的代码没有清除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];
}
ibps3vxo

ibps3vxo1#

您可以在控制器关闭时编写下面的代码。

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

sr4lhrrt2#

您可以使其加载空白页

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

htrmnn0y3#

请改用JavaScript。

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

xt0899hw4#

下面的代码清除屏幕,然后导航

雨燕

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

vyswwuz25#

清除webview的旧内容

当你调用- loadHTMLString:baseURL:时,它在加载完成之前不会阻塞,一旦它记录了你的请求,它就会返回并在后台加载。
因此,您需要等待第一次加载完成,然后再启动新的加载请求。
对于UIWebView,您将使用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覆盖webview的内容区域,你可以在加载开始时隐藏内容,然后在加载完成后使用上面的委托方法显示内容。

oxcyiej7

oxcyiej76#

雨燕

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

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

相关问题