2017-08-29 3 views
1

Je veux utiliser UIWebView dans la console, donc je définir un délégué:Utilisation UIWebView dans la console

@interface webViewDelegate : NSObject <UIWebViewDelegate> 

et écrire le protocole:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 
- (void)webViewDidStartLoad:(UIWebView *)webView; 
- (void)webViewDidFinishLoad:(UIWebView *)webView; 
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error; 

puis loadRequest:

webView = [[UIWebView alloc] init]; 
webView.delegate = WVdelegate; 
NSURL *htmlURL = [NSURL URLWithString:@"http://192.168.0.100"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:htmlURL]; 
[webView loadRequest:request]; 

Le problème est que c'est une console, et je veux terminer la console après que le délégué a été appelé. Que dois-je faire pour attendre le délégué après avoir appelé loadRequest?

+0

Que voulez-vous dire par "dans la console"? – duskwuff

+0

Que voulez-vous dire par "finir la console"? Vous voulez supprimer le Webview? –

+0

désolé, mon programme est un outil de ligne de commande, donc après l'appel [webView loadRequest: request], le programme est terminé. Je veux juste obtenir le résultat dans - (void) webViewDidFinishLoad: (UIWebView *) webView. donc je pense que je devrais ajouter faire quelque chose après l'appel [webView loadRequest: request]. – vane

Répondre

0

Vous pouvez obtenir la source HTML dans la console:

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

    NSString *fullHtml = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].outerHTML"]; 
    NSLog(@"html:%@", fullHtml); 
} 
+0

oui, je le fais juste, mais après l'appel [webView loadRequest: request], l'outil de ligne de commande est terminée, alors comment puis-je attendre webViewDidFinishLoad est appelé? Je suis essayer de faire ceci: [NSThread sleepForTimeInterval: 5]; mais c'est invalide. – vane

1

Le problème est que vous n'avez pas runloop. Ainsi, lorsque votre code se termine, l'outil de ligne de commande prend fin; les choses ne persistent pas assez longtemps pour que le code asynchrone s'exécute.

+0

Voir https://stackoverflow.com/questions/2154600/run-nsrunloop-in-a-cocoa-command-line-programme – matt