UIWebView 从加载的页面获取 http 状态码
Posted
技术标签:
【中文标题】UIWebView 从加载的页面获取 http 状态码【英文标题】:UIWebView get http status code from loaded page 【发布时间】:2015-05-27 16:09:49 【问题描述】:我在游戏中使用UIWebView
来显示客户支持表单。我注意到如果服务器返回 503 错误(从负载均衡器发送的 http 状态代码),我无法关闭 webview
有没有办法轻松获得这个 http 状态?我可以做一些设置以便在 http 状态码不是 200 时调用 didFailWithError
吗?
加载代码
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.frame];
NSURL *nsURL = [NSURL URLWithString:url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:nsURL];
webView.opaque = YES;
webView.userInteractionEnabled = YES;
[webView loadRequest:request];
webView.delegate = self;
closableWebViewController = [[UIViewController alloc] init];
[closableWebViewController.view setFrame:self.view.frame];
[closableWebViewController.view addSubview:webView];
[self presentViewController:closableWebViewController animated:YES completion:nil];
这个委托方法没有被调用
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
NSLog(@"webview error %@",error);
if (closableWebViewController)
NSLog(@"closing webview");
[closableWebViewController dismissViewControllerAnimated:TRUE completion:^
closableWebViewController = nil;
NSLog(@"webView closed");
];
【问题讨论】:
【参考方案1】:你不能轻易做到,但这里有一个很好的技巧:
How to detect and handle HTTP error codes in UIWebView?
【讨论】:
是的,我检查了这个页面,但是在我的情况下,找到一种方法来调用 didFailWithError 委托会很好。我可以要求我的系统管理员更改负载均衡器发送错误的方式。也许如果我从错误页面中删除所有 html 输出,它将解决问题。 是的,这将解决它。另一种选择是让您使用 NSUrlConnection 并在成功时手动填充 UIView。 我终于使用了另一个技巧(通过 javascript 获取 html 内容),但是 ios SDK 中显然缺少此信息。 当我们的服务器关闭时,负载均衡器返回一个特定的 html 内容,我们在返回的 html 中寻找该内容: - (void)webViewDidFinishLoad:(UIWebView *)webView NSString *html = [ webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"]; if ([html isEqualToString:@""] || [html containsString:@"Unavailable"]) // 做点什么 哦!现在我明白了!是的,这行得通。当您可以访问服务器时很好:)以上是关于UIWebView 从加载的页面获取 http 状态码的主要内容,如果未能解决你的问题,请参考以下文章
是否可以从 UIWebView 中的页面启动 iTunes?