我对整个编程业务都很陌生,并且想知道是否有任何方法可以清除UIWebViewiphone编程中的内容,以便下一个视图的加载符号不会显示在最后一个视图的前面.非常感谢,托马斯
Con*_*has 145
尝试将URL设置为about:blank并重新加载页面.
为了文档目的回答扩展,以帮助其他人:
我有同样的愿望(在加载下一个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];
}
}
Run Code Online (Sandbox Code Playgroud)
注意:使用这个:
[self.webView loadHTMLString:@"about:blank" baseURL:nil];
Run Code Online (Sandbox Code Playgroud)
实际上导致单词"about:blank"在webview的内容窗格中显示为文本!
最后的复杂性:在实践中,我的两个[webview load...]调用如此接近,我发现,而不是"加载"事件而不是清除,webview实际上是取消它而支持第二个请求并调用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];
}
}
Run Code Online (Sandbox Code Playgroud)
Swift,Xcode 7 beta 5
webView.loadRequest(NSURLRequest(URL: NSURL(string: "about:blank")!))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34601 次 |
| 最近记录: |