iOS,在网络视图中显示来自网站的特定html内容
问题描述:
我想从网站的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;
}
感谢
答
你应该使用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
你有什么试过?它怎么不起作用?你有错误信息吗?堆栈溢出是在您已经尽力解决问题之后去的地方。我们希望看到你已经尝试了什么,有什么工作,以及你得到了什么样的产出。有十亿种方法让某些东西“不能工作”,我们需要知道具体到底发生了什么。 –
该代码不会抛出任何错误,代码不工作意味着不显示来自网站的内容。 – Samer
它显示任何东西吗?还是只是空白?如果你NSLog的文章字符串,你有什么在你的日志?也许你只是没有正确地连接你的网络视图。 –