2016-04-21 40 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