【发布时间】:2011-07-04 21:18:19
【问题描述】:
我对整个编程业务很陌生,想知道是否有任何方法可以清除 iphone 编程中 UIWebView 的内容,以便下一个视图的加载符号不会出现在前面最后一个视图。
非常感谢,
托马斯
【问题讨论】:
我对整个编程业务很陌生,想知道是否有任何方法可以清除 iphone 编程中 UIWebView 的内容,以便下一个视图的加载符号不会出现在前面最后一个视图。
非常感谢,
托马斯
【问题讨论】:
尝试将 URL 设置为 about:blank 并重新加载页面。
【讨论】:
webViewDidFinishLoad委托方法触发的替代方法吗? (nil'ing 委托是不可行的:clear 之后会立即加载另一个真实内容,因此请准备好委托以防快速响应......所以需要在第一次加载之后关闭委托,然后再打开之前第二次加载,但都是异步的,所以在第一次加载完成之前我不能阻塞)。
只需加载一个空的 html 字符串到其中
[self.webView loadHTMLString:@"" baseURL:nil];
【讨论】:
A JavaScript exception occurred 大约一百万次,所以我改变了它,哈哈,它起作用了!
用于文档目的的答案扩展可能会帮助其他人:
我有同样的愿望(在加载下一个 url 之前清除内容),但设置了 UIWebView 委托来接收webviewDidFinishLoad:(UIWebView)webview 消息并更新 UI 的另一部分作为响应。
问题:对清除内容的调用也调用了委托方法,所以会出现错误命中(也就是说,在清除完成时也得到调用,但委托被编码为只期望调用加载真实内容时)。
解决方案:使用已知 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 视图实际上取消了它以支持第二个请求并调用 @,而不是用于清除的“加载”事件987654326@ 用于第一个加载请求。因此,我不得不在那个事件中加入类似的代码:
- (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];
}
}
【讨论】:
斯威夫特,Xcode 7 测试版 5
webView.loadRequest(NSURLRequest(URL: NSURL(string: "about:blank")!))
【讨论】:
Swift 4.0,XCODE 9
webView.loadRequest(URLRequest.init(url: URL.init(string: "about:blank")!))
【讨论】:
Swift 4.2、xCode 10
中的答案相同if let clearURL = URL(string: "about:blank") {
myWebView.loadRequest(URLRequest(url: clearURL))
}
【讨论】: