web-dev-qa-db-fra.com

Comment effacer un UIWebView

Je suis très nouveau dans le secteur de la programmation et je me demandais s’il est possible de vider le contenu d’une programmation UIWebView dans la programmation pour iPhone, de sorte que le symbole de chargement de la vue suivante ne s’affiche pas devant la dernière vue Merci beaucoup, Thomas

40
Tom Cuzz

Essayez de définir l'URL sur about:blank et rechargez la page.

142

Il suffit de charger une chaîne html vide dans celui-ci

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

25
2cupsOfTech

Répondez à l'extension à des fins de documentation pour peut-être aider quelqu'un d'autre:

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

Problème: l’appel pour effacer le contenu vers également appelé méthode déléguée, ce qui permet d’obtenir des faux hits (c’est-à-dire que l’obtention de l’appel lorsque l’effacement est effectuée est également effectuée, mais que le délégué est codé pour attendre un appel uniquement lorsque le contenu réel est chargé) .

Solution: utilisez une URL connue pour effacer et assurez-vous que webviewDidFinishLoad: ignore 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 sorte que les mots "about: blank" apparaissent sous forme de texte dans le volet de contenu de la vue Web!

Complication finale: dans la pratique, avec mes deux appels [webview load...] si rapprochés, je trouvais qu'au lieu d'un événement "chargé" pour la libération, la visualisation Web l'annulait en fait en faveur de la deuxième demande et appelait webView: didFailLoadWithError: pour la première demande de chargement. . Ainsi, je devais 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];
    }
}
9
Bill Patterson

Swift, Xcode 7 beta 5

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

Swift 4.0, XCODE 9

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

Même réponse dans Swift 4.2, xCode 10

if let clearURL = URL(string: "about:blank") {
   myWebView.loadRequest(URLRequest(url: clearURL))
}
0