【问题标题】:Use UIWebView in console [duplicate]在控制台中使用 UIWebView [重复]
【发布时间】:2018-02-06 07:46:30
【问题描述】:

我想在控制台中使用 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;

然后加载请求:

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后,我该怎么做才能等待代理?

【问题讨论】:

  • “在控制台中”到底是什么意思?
  • “完成控制台”是什么意思?您要删除 Web 视图吗?
  • 对不起,我的程序是一个命令行工具,所以在调用[webView loadRequest:request]之后,程序就结束了。我只想在 - (void)webViewDidFinishLoad:(UIWebView * ) 网络视图。所以我想我应该在调用 [webView loadRequest:request] 之后添加做一些事情。

标签: ios objective-c uiwebviewdelegate


【解决方案1】:

问题是你没有运行循环。因此,当您的代码结束时,命令行工具也将结束;事情的持续时间不足以让异步代码运行。

【解决方案2】:

您可以在控制台中获取 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);
}

【讨论】:

  • 是的,我就是这么做的,但是在调用 [webView loadRequest:request] 之后,命令行工具就结束了,那么我该如何等待 webViewDidFinishLoad 被调用呢?我正在尝试这样做:[ NSThread sleepForTimeInterval:5];但它是无效的。
猜你喜欢
  • 2014-06-14
  • 2014-02-18
  • 2011-09-23
  • 1970-01-01
  • 2012-11-11
  • 2012-09-12
  • 1970-01-01
  • 2013-09-19
  • 2015-12-19
相关资源
最近更新 更多