如何在不加载空页面的情况下清理 UIWebView 的内容?

Posted

技术标签:

【中文标题】如何在不加载空页面的情况下清理 UIWebView 的内容?【英文标题】:How to clean the content of UIWebView without loading an empty page? 【发布时间】:2012-06-06 06:43:25 【问题描述】:

我需要清理 UIWebView 的内容(为了重用它),但是我在它的委托方法中有一些身份验证处理代码,所以我不想加载一个空页面,比如 about:blank 来清理它,因为它将触发我的身份验证处理代码。那么有没有办法做到这一点? (另外,通过重用它,我需要在 web 视图顶部放置一个微调器,当它加载另一个页面时,我不希望用户看到之前加载的页面内容,所以这就是我需要清理它的原因)

谢谢!

【问题讨论】:

【参考方案1】:

你可以直接使用这行代码:

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

Here你会找到整个演示

【讨论】:

是的,我知道这一点,但是如果您阅读我的问题,我要问的是一种不加载“about:blank”的方法。还是谢谢! 你不能做你想做的事,你必须这样做,没有其他方法可以做到这一点。【参考方案2】:

这对我有用:

 [webView stringByEvaluatingjavascriptFromString:@"document.open();document.close()"];

【讨论】:

我发现这个解决方案在清理一个大的 webview 时阻塞了我的主线程 4 秒。 似乎任何 js 都会阻塞主线程,所以请记住。虽然没有机会在后台线程上启动它 几年前我已经 +1 了这个答案,但是在 ios 9 上,如果我经常这样做(每次用户按下“返回”按钮),WebView 有时会开始崩溃;也试过performSelectorOnMainThread:,没有运气。 @Nilesh (load about:blank) 的版本可以解决问题而不会崩溃。【参考方案3】:

试试这个。这对我有用

[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.innerhtml = \"\";"];

【讨论】:

【参考方案4】:

如果您唯一的问题是加载空白页面时微调器消失,您可以在 webViewDidFinishLoad 中使用此代码:

– (void)webViewDidFinishLoad:(UIWebView *)currentWebView 
    if (![currentWebView.request.URL.description isEqualToString: @"about:blank"]) 
        self.mySpinner.hidden = YES;
    

...然后微调器将继续运行,直到您的 webview 实际完成加载。

【讨论】:

以上是关于如何在不加载空页面的情况下清理 UIWebView 的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新加载页面的情况下更改页面 url

如何在不重新加载页面的情况下提交表单[重复]

如何在不刷新整个页面的情况下重新加载组件?

如何在不重新加载页面的情况下更改 URL?

如何在不重新加载页面的情况下获取数据表单数据库?

如何在不重新加载整个页面的情况下刷新 div?