2017-08-29 53 views
1

我想在控制檯中使用的UIWebView,所以我定義了一個委託:使用一個UIWebView在控制檯

@interface webViewDelegate : NSObject <UIWebViewDelegate> 

,寫的協議:

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

然後的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]; 

問題是這是一個控制檯,我想在代理調用完成後完成控制檯。撥打loadRequest後,我該怎麼做才能等待代表?

+0

你究竟是什麼意思的「在控制檯」? – duskwuff

+0

「完成控制檯」是什麼意思?你想刪除Webview? –

+0

對不起,我的程序是一個命令行工具,所以在調用[webView loadRequest:request]之後,程序結束了.i只想在 - (void)webViewDidFinishLoad:(UIWebView *)webView中獲取結果。所以我想我應該在調用[webView loadRequest:request]之後添加一些操作。 – vane

回答

0

您可以在控制檯中看到HTML源代碼:

- (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

是的,我只是這樣做,但在調用[webView loadRequest:request]之後,命令行工具已經結束了,那麼如何等待webViewDidFinishLoad被調用呢?我正在嘗試這樣做:[NSThread sleepForTimeInterval:5];但它是無效的。 – vane

1

的問題是,你有沒有runloop。因此,當你的代碼結束時,命令行工具就結束了;事情並沒有持續足夠長的時間來運行異步代碼。

+0

查看https://stackoverflow.com/questions/2154600/run-nsrunloop-in-a-cocoa-command-line-program – matt