2017-06-21 4 views
0

J'ai un UIWebView et je le fais charger une chaîne HTML. La chaîne contient des URL http sur les images. Les images sont chargées, mais la méthode shouldStartLoadWithRequest: n'est pas appelée pour elles. Il est appelé une seule fois, pour about : blank. Cependant toutes les demandes d'images sont passées avec succès dans ma sous-classe NSURLCache, dans la méthode cachedResponseForRequest:. Mais je voudrais gérer les demandes dans la méthode shouldStartLoadWithRequest:. Peut-on faire quelque chose à ce sujet? Comment puis-je faire passer ces demandes dans la méthode des délégués?shouldStartLoadWithRequest: pas appelé pour les images

Voici le code:

@interface URLCache : NSURLCache 

@end 

@implementation URLCache 

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request 
{ 
    NSLog(@"REQUEST = %@", request.URL); 

    return [super cachedResponseForRequest:request]; 
} 

@end 

@interface ViewController()<UIWebViewDelegate> 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [NSURLCache setSharedURLCache:[URLCache new]]; 

    NSString* path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]; 
    NSString* html = [NSString stringWithContentsOfFile:path 
              encoding:NSUTF8StringEncoding 
               error:nil]; 

    self.webView.delegate = self; 

    [self.webView loadHTMLString:html baseURL:nil]; 
} 

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

    return YES; 
} 

@end 

Répondre

0

La méthode shouldStartLoadWithRequest est appelée uniquement pour les charges de page (qui est, lorsque la page dans son ensemble se charger ou quand se charger le contenu d'un cadre), et non pas lors du chargement individuel des ressources telles que des images, JavaScript ou CSS.

Si vous souhaitez manipuler toutes les demandes HTTP/HTTPS à partir d'un UIWebView, la seule façon dont je suis conscient de le faire est d'utiliser une sous-classe NSURLProtocol personnalisée. Voir l'exemple de projet de code Custom HTTP Protocol d'Apple pour un exemple de la façon de procéder.