• 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 

  • 相关阅读:
    Android中Handler与Message的简单实例
    折腾蛋疼的Ubuntu1204LTS的U盘安装
    sgs_intro
    把杀某程序封装成sh
    boost 程序库完全开发_ch4_utility
    VS2005 warning C4819处理办法(提示代码页有不兼容的字符)
    Ubuntu1204LTS下xynxyc编译Emacs24.02
    当VS05调试赋值不对时,小心只是IDE的watch在骗你.....
    很好的boost学习资料
    C++实现Creational Singleton模式
  • 原文地址:https://www.cnblogs.com/aaalice/p/4222918.html
Copyright © 2020-2023  润新知