2016-04-21 105 views
0

我想从网站的html的特定部分检索数据,并且我编写了以下代码。不幸的是,代码无法正常工作。我怎样才能解决这个问题?iOS,在网络视图中显示来自网站的特定html内容

html类名是“topic_content”,并且适用站点中的每篇文章都包含它(请参阅代码中的注释)。

@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; 
} 

感谢

+0

你有什么试过?它怎么不起作用?你有错误信息吗?堆栈溢出是在您已经尽力解决问题之后去的地方。我们希望看到你已经尝试了什么,有什么工作,以及你得到了什么样的产出。有十亿种方法让某些东西“不能工作”,我们需要知道具体到底发生了什么。 –

+0

该代码不会抛出任何错误,代码不工作意味着不显示来自网站的内容。 – Samer

+0

它显示任何东西吗?还是只是空白?如果你NSLog的文章字符串,你有什么在你的日志?也许你只是没有正确地连接你的网络视图。 –

回答

2

你应该使用innerHTML代替sinnerHtml,除了这一点,你需要得到的字符串,这个字符串加载到另一个网页流量。请看例

#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 
+0

哈哈“sinnerHtml”听起来像一个了不起的类,但是“内在”是肯定更有用! –

+1

刚编辑我的答案,因为是在回调中的错误 – dminones

+0

对不起,这段代码不起作用,发生异常,这个图像显示http://postimg.org/image/i41lcfhbr/可以帮助我通过教程从零开始工作或开始:) – Samer