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?

UIWebView加载页面

获取 UIWebView 加载内容的高度

当页面加载时,如何使 UIWebView 看起来与移动 safari 完全一样? (不是超级放大)

从 URL 加载内容后,UIWebView 显然滚动了

iOS uiwebview 无法从 javascript 方法加载资源