如何在UiWebView中仅显示网站的部分?

时间:2016-07-02 11:56:47

标签: html ios objective-c uiwebview

我想在UiWebView中显示网站,但我不需要显示所有网站,但只能从<section id="xxx"></section>显示CSS样式的可选<head>。我试着下载html代码并将其粘贴到UiWebView

NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://example.com/page"] encoding:NSUTF8StringEncoding error:nil];

NSString* content2 = string;
NSString* beforeBody = @"<section id=";
NSString* afterBody = @"</section>";

NSString* finalContent = [[beforeBody stringByAppendingString:content2]
                          stringByAppendingString: afterBody];

[_webView loadHTMLString:finalContent baseURL:nil];

但它对我没用。有任何想法吗?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

在viewController,webView和webView2中创建2个UIWebViews,在viewController标题中实现@interface ViewController : UIViewController <UIWebViewDelegate>

在viewDidAppear中,您将从您想要使用的页面加载fullHTMLString到webView2中,然后像这样设置webView2的委托:

-(void)viewDidAppear:(BOOL)animated
{
    NSString *fullHTMLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://python.org"] encoding:NSASCIIStringEncoding error:nil];

    [self.webView2 setHidden:YES];
    [self.webView2 loadHTMLString:fullHTMLString baseURL:nil];
    [self.webView2 setDelegate: self];
}

您必须实现webViewDidFinishLoad委托方法,并在其中调用[stringByEvaluatingJavaScriptFromString],它将根据您提供的参数检索所需的单个元素。

在此示例中,我选择通过ElementID检索它,您可以使用javascript以其他方式检索它。

一旦你想要显示你想要的元素,你就创建一个HTML字符串并将其插入其中,之后你将带有单个元素的完整html加载到第一个webView(webView而不是webView2)中,这是为了防止无休止的在调用委托方法时循环。

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{
    NSString *singleElementString = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"mainnav\").innerHTML;"];
    NSString *html = [[NSString alloc] initWithFormat:@"<html>%@</html>", singleElementString];
    [self.webView loadHTMLString:html baseURL:nil];
}