web-dev-qa-db-fra.com

Comment détecter lorsqu'un UIWebView est complètement chargé?

J'essaie de créer un filtre pour UIWebView et j'ai du mal à détecter la fin du chargement de UIWebView. J'ai utilisé les deux méthodes suivantes

– webView:shouldStartLoadWithRequest:navigationType:
– webViewDidFinishLoad:

mais le problème est qu'ils seront appelés plusieurs fois lorsqu'une page aura des cadres et du contenu supplémentaire à charger. 

Ce dont j'ai besoin, c'est de savoir quand la vue est complètement chargée et qu'il n'y a plus de contenu à récupérer. Ensuite, lorsque le contenu est chargé, je peux vérifier l'URL de la page par rapport à une liste d'URL approuvées.

Des idées?

15
ORStudios

Utilisez la méthode de protocole UIWebViewDelegatewebViewDidFinishLoad et webView's isLoading property 

 - (void)webViewDidFinishLoad:(UIWebView *)webView
 {
    //Check here if still webview is loding the content
    if (webView.isLoading)
       return;

    //after code when webview finishes
    NSLog(@"Webview loding finished");
 }
34
Paresh Navadiya

Version Swift 3:

func webViewDidFinishLoad(_ webView: UIWebView) {
    if webView.isLoading{
        return
    }
    print("Done loading")
}
2
realtimez

Il est vrai que la question initiale a été postée il y a de nombreuses années. Récemment, j'ai dû trouver une solution fiable à ce problème.

Voici la solution qui a fonctionné pour moi:

  1. UIWebView remplacé par WKWebWiew. 
  2. Ajout du code 'assessmentJavaScript' lors de la gestion de la méthode déléguée 'didFinishNavigation'.

Le code complet est:

   - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
    [webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id result, NSError *error) {
        if (result != nil) {
            // Call your method here
        }
        if(error) {
            NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
        }
    }];
}
1
Nish

Essayez d'utiliser:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)requestURL navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = [requestURL URL];
NSLog(@"##### url = %@",[url absoluteString]); 
return YES;
}

n'oubliez pas de définir votre délégué UIWebView

ou ajouter une déclaration,

NSRange range = [[url absoluteString] rangeOfString:@"https://www.google.com"];
if (range.location != NSNotFound)
{}

j'espère vous aider.

1
Love Thailand