首页 > 代码库 > iOS UIWebView与JS(JavaScript)交互-----根据节点隐藏HTML中内容

iOS UIWebView与JS(JavaScript)交互-----根据节点隐藏HTML中内容

     在移动端(这里指iOS)开发中,我们免不了使用UIWebView与JS交互。

     先简单了解一下JS,JavaScript是一种直译式的脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。广泛用于客户端,主要用来向HTML页面添加交互行为。它可以直接嵌入HTML页面,但写成单独的JS文件有利于结构和行为的分离。JS具有跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Andriod、iOS等)。作为直译语言,它的弱点:安全性。
                                          -- 摘自 百度百科

   来看看JS的组成:

   ECMAScript : 描述该语言的语法和基本对象

              DOM:文档对象模型,描述处理网页内容的方法和接口。

       BOM:浏览器对象模型,描述与浏览器进行交互的方法和接口

 

举例:

下面是一个HTML页面的网址

http://breadtrip.com/mobile/destination/topic/2387718902/

网页打开是这样

技术分享

使用Google浏览器打开(别的也行哈),可以看到网站的源码,

技术分享

我现在直接把它嫁接到我的webView上

 

  CGRect frame = self.view.bounds;        UIWebView * webView = [[UIWebView alloc] initWithFrame:frame];    webView.delegate = self;    self.webView = webView;    [self.view addSubview:webView];            dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL);    dispatch_async(queue, ^{        NSString * dataString = [NSString stringWithContentsOfURL:[NSURL URLWithString:self.webUrl] encoding:NSUTF8StringEncoding error:nil];                dataString = [dataString stringByReplacingOccurrencesOfString:@"\"m-app-download\"" withString:@""];                dataString = [dataString stringByReplacingOccurrencesOfString:@"\"post-comment\"" withString:@""];                dispatch_async(dispatch_get_main_queue(), ^{            [self.webView loadHTMLString:dataString baseURL:nil];        });    });    dispatch_release(queue);        [webView release];

 

 但是在开发中,网页上的信息我们并不是全要,所以,可以在UIWebView的代理方法

- (void)webViewDidFinishLoad:(UIWebView *)webView 

中,使用dom语言把不需要的部分隐藏掉,获取dom节点,并对其中内容进行操作,有很多方法,这里不做赘述,根据需求,这里做隐藏操作

- (void)webViewDidFinishLoad:(UIWebView *)webView{    [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName(\"m-app-download\")[0].hidden = true;"];        [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName(\"comments\")[0].hidden = true;"];        [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName(\"btn btn-single\")[0].hidden = true"];        [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName(\"note\")[0].hidden = true"];            NSString * lengthString = [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName(\"btn btn-single\").length"];        int length = [lengthString intValue];        for (int i = 0; i<length; i++) {        [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementsByClassName(\"btn btn-single\")[%d].hidden = true;",i]];    }    }

这样,就可以把界面中不需要的部分隐藏掉了

参考博文: http://www.cnblogs.com/beijingxiaoguo

希望对阅读博文的朋友有帮助,如果文中有描述不清晰的地方,欢迎大家留言,如果有写得不对的地方,也请大家指出

Good night! 

                                          Alice 

 

iOS UIWebView与JS(JavaScript)交互-----根据节点隐藏HTML中内容