如何清除UIWebView
我对整个编程业务很陌生,想知道是否有任何方法在iphone编程中清除UIWebView
的内容,以便下一个视图的加载符号不会显示在最后一个视图的前面。 很多谢谢,托马斯
尝试将URL设置为about:blank
并重新加载页面。
只需加载一个空的htmlstring
[self.webView loadHTMLString:@"" baseURL:nil];
为了文档的目的,扩展名可以帮助其他人:
我有同样的愿望(加载下一个url之前清除内容),但有一个UIWebView委托设置为接收webviewDidFinishLoad:(UIWebView)webview
消息和更新另一部分的UI作为响应。
问题:清除内容的调用也调用了委托方法,因此获得假命中(也就是在清除完成时也获得调用,但委托编码仅在加载实际内容时期望调用)。
解决scheme:使用已知的URL清除,并有webviewDidFinishLoad:
忽略该URL完成时的调用:
- (void) startLoadOfNextURL:(NSURL*)url { // clear: [self.webView loadHTMLString:@"" baseURL:nil]; // Load real next URL NSURLRequest* request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:request]; } - (void)webViewDidFinishLoad:(UIWebView *)webView { NSLog(@"WebView finished loading: %@", webView); if ([self.webView.request.URL.absoluteString isEqualToString:@"about:blank"]) { NSLog(@" This is Blank. Ignoring as false event."); } else { NSLog(@" This is a real url"); [self updateUIInSomeWay]; } }
注意:使用这个:
[self.webView loadHTMLString:@"about:blank" baseURL:nil];
实际上会导致“about:blank”字样在webview的内容窗格中显示为文本!
最终的复杂性:在实践中,我的两个[webview load...]
调用如此接近,我发现,而不是一个“加载”事件清除,web视图实际上取消它赞成第二个请求和调用webView: didFailLoadWithError:
用于第一个加载请求。 因此,我不得不在这种情况下使用类似的代码:
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { NSLog(@"WebView error on: %@", webView); NSLog(@"Error is: %@", error); NSURL* failingURL = [error.userInfo objectForKey:@"NSErrorFailingURLKey"]; if ([failingURL.absoluteString isEqualToString:@"about:blank"]) { NSLog(@" This is Blank. Ignoring."); } else { NSLog(@" This is a real URL."); [self doSomethingAboutError]; } }
Swift,Xcode 7 beta 5
webView.loadRequest(NSURLRequest(URL: NSURL(string: "about:blank")!))
Swift 3.0,XCODE 8
webView.loadRequest(URLRequest.init(url: URL.init(string: "about:blank")!))