【问题标题】:iOS, show specific html content from site on web viewiOS,在 Web 视图上显示来自站点的特定 html 内容
【发布时间】:2016-04-21 17:28:14
【问题描述】:

我想从网站的 html 的特定部分检索数据,我编写了以下代码。不幸的是,代码不起作用。我该如何解决这个问题?

html 类名是“topic_content”,适用站点的每篇文章都包含它(参见代码中的 cmets)。

@implementation DetailViewController
....
UIActivityIndicatorView *activityIndicator;

- (void)viewDidLoad {
      .....
      activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
      [activityIndicator stopAnimating];
      ....
      [self callDetailNews];
}

-(void)callDetailNews{
      ....
      if ([[Reachability reachabilityForInternetConnection]currentReachabilityStatus]!=NotReachable)
      {
           // article link :: http://el3en.com/?articles=topic&topic=20840 (token_ID)

           // <td class="topic_content" colspan='6' itemprop="articleBody"  style="text-align:justify;  word-wrap: break-word; width:100%">

           // NSString *someHTML = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('box')[0].innerHTML;"];

           NSString *articleString = [NSString stringWithFormat:@"http://el3en.com/?articles=topic&topic=%@",token_ID];

           NSURL *articleURL = [NSURL URLWithString:articleString];
           NSError *error;
           NSString *articlePage = [NSString stringWithContentsOfURL:articleURL
                                                 encoding:NSASCIIStringEncoding
                                                 error:&error];

           [_webView loadHTMLString:articlePage baseURL:nil];

           //NSString *someHTML = [_webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('topic_content')[0].innerHTML;"];
           //NSLog(@"Content : %@",someHTML);
     }
     .....
}

- (void)webViewDidStartLoad:(UIWebView *)webView {
     [activityIndicator startAnimating];
     self.webView.hidden=true;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
     [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('topic_content')[0].sinnerHTML;"];

     [activityIndicator stopAnimating];
     self.webView.hidden=false;
}

谢谢

【问题讨论】:

  • 你试过什么?它怎么不工作?您收到错误消息吗? Stack Overflow 是您尽最大努力解决问题后的去处。我们想看看你尝试了什么,什么有效,以及你得到了什么样的输出。有十亿种方法让某事“不起作用”,我们需要知道具体出了什么问题。
  • 代码不抛出任何错误,代码不起作用意味着不显示来自站点的内容。
  • 它有什么显示吗?还是只是空白?如果您 NSLog 文章字符串,您是否在日志中得到了一些东西?也许您只是没有正确连接您的网络视图。
  • 应用程序每次加载并且不停止然后代码没有显示任何内容

标签: html ios parsing


【解决方案1】:

您应该使用innerHtml 而不是sinnerHtml,除此之外您还需要获取字符串并将该字符串加载到另一个webview 中。请看示例

#import "ViewController.h"

@interface ViewController ()
@property (strong, nonatomic) IBOutlet UIWebView *fakeView;
@end

@implementation ViewController


UIActivityIndicatorView *activityIndicator;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [activityIndicator stopAnimating];



    [self callDetailNews];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


-(void)callDetailNews{

    if ([[Reachability reachabilityForInternetConnection]currentReachabilityStatus]!=NotReachable)
    {
        // article link :: http://el3en.com/?articles=topic&topic=20840 (token_ID)

        // <td class="topic_content" colspan='6' itemprop="articleBody"  style="text-align:justify;  word-wrap: break-word; width:100%">

        // NSString *someHTML = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('box')[0].innerHTML;"];

        NSString *articleString = [NSString stringWithFormat:@"http://el3en.com/?articles=topic&topic=%@",@"20840"];

        NSURL *articleURL = [NSURL URLWithString:articleString];
        NSError *error;
        NSString *articlePage = [NSString stringWithContentsOfURL:articleURL
                                                         encoding:NSASCIIStringEncoding
                                                            error:&error];

        NSLog(@"Request %@",articleURL);
    self.fakeView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
        self.fakeView.delegate = self;
        [self.fakeView loadRequest:[NSURLRequest requestWithURL:articleURL]];

        //NSString *someHTML = [_webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('topic_content')[0].innerHTML;"];
        //NSLog(@"Content : %@",someHTML);
    }

}

- (void)webViewDidStartLoad:(UIWebView *)webView {
    [activityIndicator startAnimating];
    self.webView.hidden=true;
}

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    NSLog(@"error %@" ,[error description]);
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {

    if(webView == self.fakeView) {
        NSString* javascriptString = [self.fakeView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('topic_content')[0].innerHTML"];

        NSLog(@"%@",javascriptString);
        [self.webView loadHTMLString:javascriptString baseURL:[NSURL URLWithString:@""]];
        self.fakeView = nil;
    }else{
        [activityIndicator stopAnimating];
        self.webView.hidden=false;
    }
}
@end

【讨论】:

  • 哈哈 "sinnerHtml" 听起来像一个很棒的课程,但是是的 "inner" 肯定更有用!
  • 刚刚编辑了我的答案,因为回调中有错误
  • 对不起,这个代码不起作用,发生了异常,这个图像显示postimg.org/image/i41lcfhbr你能通过教程帮助我从零开始工作吗:)
  • 刚刚更新了代码,我在本地试过了,它可以工作
猜你喜欢
  • 1970-01-01
  • 2013-04-22
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
相关资源
最近更新 更多