43 votes

Comment effacer une UIWebView

Je suis très novice en matière de programmation et je me demandais s'il existait un moyen d'effacer le contenu d'un fichier de type UIWebView dans la programmation iphone, afin que le symbole de chargement de la vue suivante ne s'affiche pas devant la dernière vue. Merci beaucoup, Thomas

149voto

Randy Marsh Points 3229

Essayez de définir l'URL comme suit about:blank et recharger la page.

27voto

2cupsOfTech Points 1541

Il suffit d'y charger une chaîne html vide

[self.webView loadHTMLString:@"" baseURL:nil];

10voto

Bill Patterson Points 646

Extension de la réponse à des fins de documentation pour peut-être aider quelqu'un d'autre :

J'ai eu le même désir (effacer le contenu avant de charger l'url suivante) mais j'avais un délégué UIWebView configuré pour recevoir webviewDidFinishLoad:(UIWebView)webview et mettre à jour une autre partie de l'interface utilisateur en réponse.

Problème : l'appel pour effacer le contenu à également a appelé la méthode du délégué, et a donc reçu des faux coups (c'est-à-dire qu'il a reçu un appel lorsque l'effacement a été effectué, mais le délégué est codé pour ne s'attendre à être appelé que lorsque le contenu réel est chargé).

Solution : utiliser une URL connue pour le clair, et avoir webviewDidFinishLoad: ignorer les appels effectués lorsque cette URL est terminée :

- (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];
    }
}

Note : en utilisant ceci :

    [self.webView loadHTMLString:@"about:blank" baseURL:nil];

fait en réalité apparaître les mots "about:blank" sous forme de texte dans le volet de contenu de la vue Web !

Dernière complication : En pratique, avec mes deux [webview load...] si rapprochés, je constatais qu'au lieu d'un événement "chargé" pour le clear, le webview l'annulait en fait en faveur de la deuxième requête et appelait webView: didFailLoadWithError: pour la première demande de chargement. Ainsi, j'ai dû mettre un code similaire dans cet événement :

- (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];
    }
}

5voto

neoneye Points 11545

Swift, Xcode 7 beta 5

webView.loadRequest(NSURLRequest(URL: NSURL(string: "about:blank")!))

3voto

ViJay Avhad Points 2117

Swift 4.0 , XCODE 9

webView.loadRequest(URLRequest.init(url: URL.init(string: "about:blank")!))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X