0

我正在使用UIWebView我的 iOS 7 应用程序加载网页。我的网页中有一些损坏的链接。

当我点击这些链接时,我想用一个alertView. 我实施了以下代表,但没有得到回应。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
- (void)webViewDidFinishLoad:(UIWebView *)webView;
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;

注意:当我单击未损坏的链接时,会调用这些委托方法。

那么有什么方法webView可以响应断开的链接呢?

提前致谢。

4

2 回答 2

0

尝试这个:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    int status = [[[webView request] valueForHTTPHeaderField:@"Status"] intValue];
    if (status == 404) {

    }
}

从这里您可以检查状态。希望这可以帮助 .. :)

于 2014-04-07T07:59:34.710 回答
0

一种可能是消费shouldStartLoadWithRequest

你应该:

  1. 从请求中获取 url。
  2. 向 url 发送异步请求。
  3. 检查你是否得到回应。如果没有响应,则取消此请求,否则通过返回来允许它TRUE

看看如何发送请求。

再次检查特定页面的可达性

使用可达性检查远程主机的可用性是否明智?

使用这种方式,您可以取消请求并通知用户指定的页面不可用。如果您有有效的响应,您还可以检查响应HTTP 状态代码,通常为200 。

希望能帮助到你!

另一种方法是从您的网页本身处理它,即将它重定向到某个显示该页面不可用的常见页面,然后将back其重定向到上一页。

编辑:

h在单独的项目文件中尝试此代码:

@interface ViewController : UIViewController<UIWebViewDelegate>

并在m文件中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

     NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]];

     UIWebView *wbWebView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    [self.view addSubview:wbWebView];
    [wbWebView setDelegate:self];   // <------------- set delegate
    [wbWebView loadRequest:request];
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"request loading... %@", [request URL].absoluteString);

    // TODO : Validate here
    // If validated then return TRUE otherwise false;
    return YES;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"request finished loading");
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"request failed loading");
}
于 2014-04-07T08:16:29.850 回答