zoukankan      html  css  js  c++  java
  • (五十九)iOS网络基础之UIWebView简易浏览器实现

    【UIWebView网络浏览器】

    通过webView的loadRequest方法可以发送请求显示相应的网站,例如:

        NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"];
        // 创建请求数据
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        // 向服务器发送请求
        [self.webView loadRequest:request];

    通过使用searchBar,可以实现网址的输入,searchBar有一个delegate属性可以将控制器设为其代理,下面实现了一个简易的浏览器。

    首先是调用代理方法来监听搜索按钮:

    - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
        
        [self.view endEditing:YES];
        
        [self searchWithNSStringUrl:searchBar.text];
        
    }

    然后实现搜索栏信息的解析,注意没有http://要补全的逻辑方法:

    使用NSStringFromRange方法可以实现字符串的子串位置查找,通过判断range的location成员是否等于NSNotFound可以判断是否匹配失败。

    - (void)searchWithNSStringUrl:(NSString *)surl{
        
        NSRange range = [surl rangeOfString:@"http://"];
        
        NSLog(@"range = %@",NSStringFromRange(range));
        
        if (range.location == NSNotFound) {
            
            NSString *head = @"http://";
            surl = [head stringByAppendingString:surl];
            
        }
        
        NSURL *url = [NSURL URLWithString:surl];
        // 创建请求数据
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        // 向服务器发送请求
        [self.webView loadRequest:request];
        
    }

    直接判断字符串是否以某字符串开头可以直接使用NSString的hasPrefix:方法。

    前进和后退的实现:

    直接将按钮的前进和后退事件和按钮绑定。

    一些细节:

    1.在不能后退和前进时应该将按钮禁用,不同页面是通过链表连接的。

    判断的方式:通过判断webView的链表,也可以通过canGoBack和canGoForward两个BOOL变量来判断。

    2.地址栏应该随着网页内容而改变,通过获取WebView的URL,并通过absoluteString方法转为字符串:

    - (void)webViewDidStartLoad:(UIWebView *)webView{
        NSURL *url = webView.request.URL;
        NSString *surl = [url absoluteString];
        self.searchBar.text = surl;
    }

    使用HTML:

    PhoneGap是基于HTML 5开发的一套框架,只要会做网页就可以开发应用,但是不能使用原生的硬件。

    好处是可以一次性开发多个平台的应用。


    【利用UIWebView加载文件】

    可以通过Bundle或者沙盒加载。

    传入文件的URL即可加载doc、txt、图片、pdf等各种内容。

    例如读入一本pdf:

    NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"English.pdf" withExtension:nil];
    NSURLRequest *request = [NSURLRequest requestWithURL:fileURL];
    [self.webView loadRequest:request];
    还可以通过dataDetectorTypes来设定需要高亮链接的文本类型:例如电话、地址、邮箱等

    _webView.dataDetectorTypes = UIDataDetectorTypeAll;

    【利用UIWebView加载HTML】

    [self.webView loadHTMLString:@"<h1>hello</h1>" baseURL:nil];
    利用这个功能可以实现删除广告等功能。


    【UIWebView能够加载文件的原因】

    MIME type是一个互联网标准,服务器将MIME标识符放入传送的数据中告诉浏览器使用哪种插件读取相关文件,MIME类型可以包含视频、图像、文本等数据。

    网络通过二进制数据流来传输数据,客户端通过MIME type能够知道如何处理接收的数据。

  • 相关阅读:
    mybatis-plus物理分页插件使用
    mybatis-plus提供支持ActiveRecord模式
    mybatis-plus通用Service
    mybatis-plus返回查询总记录数
    Mybatis-Plus查询返回Map类型数据
    Mybatis-Plus条件构造器condition动态判断条件
    Mybatis-Plus条件构造器select方法返回指定字段
    mybatis-plus条件构造器UpdateWrapper实例
    mybatis-plus条件构造器QueryWrapper实例
    这玩意比ThreadLocal叼多了,吓得why哥赶紧分享出来。
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154191.html
Copyright © 2011-2022 走看看