2010-11-11 9 views
0

J'implémente une application qui a un UIWebView. Mon problème est que je dois afficher une alerte quand il ne parvient pas à charger le webview avec l'URL. Il fonctionne correctement pour les erreurs de type 1001 et 1009, mais il ne répond pas pour les erreurs 404. Je ne suis pas capable de m'en sortir. Pouvez-vous aider les gars à gérer ces types d'erreurs?UIWebView didFailWithError ne répond pas aux erreurs 404

Merci, S.

Répondre

1

Certains serveurs Web renverront une page web pour une erreur 404, qui charge correctement, et donc la WebView n'a pas manqué de charger.

Cela peut être la raison pour laquelle vous voyez ce comportement.

Il n'y a pas de moyen simple d'accéder à URLConnection de la webview pour répondre aux rappels de code d'état.

Si vous avez vraiment besoin d'afficher une alerte lorsqu'une 404 est rencontrée au lieu de laisser le serveur web afficher sa propre page 404, vous pouvez créer vous-même un NSURLConnection et un NSURLRequest pour l'URL que vous souhaitez charger.

Vous pouvez ensuite télécharger le code HTML et le mettre dans un webview manuellement si cela fonctionne. Cela vous donnera le contrôle sur le délégué URLConnection et vous permettra également de répondre à un code de réponse 404.

+0

Merci pour le reqply, – sekhar

+0

Mais si nous utilisons NSURLConnection de connaître le code de réponse, alors nous devons appeler le serveur deux fois au lieu d'un. L'une consiste à charger la requête dans webview et l'autre à créer une connexion NSURLConnection. Est-il possible de gérer ces deux au lieu d'un? Veuillez me suggérer si je me trompe – sekhar

+0

Créez une seule fois la commande NSURLConnection et invoquez-la - si elle réussit, elle retournera le code HTML de la page demandée - que vous pouvez charger manuellement dans UIWebView en utilisant 'loadHTML: baseURL:'. Vous n'avez pas besoin de faire deux demandes. Si la requête échoue, vous pouvez vérifier le code de réponse pour voir pourquoi. – Jasarien

1
#pragma mark - 
#pragma mark - UIWebView Delegate Methods 
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    static BOOL isRequestWeb = YES; 

    if (isRequestWeb) { 
     NSHTTPURLResponse *response = nil; 

     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; 
     if (response.statusCode == 404) { 
      // code for 404 
      return NO; 
     } else if (response.statusCode == 403) { 
      // code for 403 
      return NO; 
     } 

    [webView loadData:data MIMEType:@"text/html" textEncodingName:nil baseURL:[request URL]]; 

    isRequestWeb = NO; 
    return NO; 
    } 

    return YES; 
}