WebView

作者: Mario_ZJ | 来源:发表于2016-09-15 20:31 被阅读1279次

    UIWebView的基本了解

    • 什么是UIWebView
      1.UIVebView是系统内置的浏览器控件
      2.系统自带的safari浏览器就是用WebView实现的
      **注意 : **
      1. webView是有缺点的,会导致内存泄露,而且这个问题是它系统本身的问题。
      2. 现在的开发并不完全是原生的开发,而更加倾向于原生+Html5的方式
      3. webView是OC代码和html代码之间进行交互的桥梁

    • WebView能加载的资源
      1.能加载远程的网络资源
      2.能加载绝大部分的常见文件(如: html\htm , pdf\doc\ppt\txt , MP4等等)
      加载MP4文件的示例图片:

      示例图片1
    示例图片2
    • UIWebView的常见属性的设置
    //设置网页自动适应(默认是NO)
    self.webView.scalesPageToFit = YES; 
    //设置检测网页中的格式类型,all表示检测所有类型包括超链接、电话号码、地址等
    self.webView.dataDetectorTypes = UIDataDetectorTypeAll; 
    //UIWebView内有一个UIScrollView控件,所以可以滚动,通过设置scrollView,可以设置UIWebView的大小和位置
    self.webView.scrollView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
    
    • UIWebView常用的加载网页的方法
      1.通过加载返回的网址的url创建的请求对象加载
      - (void)loadRequest:(NSURLRequest *)request;
      2.通过返回的html5的标签数据生成html5字符串,进行加载
      - (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;
      示例代码"
        //1.确定url(加载网页)
        NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
        //(加载本地文件)
        NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/视频/高清视频/课堂问答-上午.mp4"];
        
        //2.创建请求对象
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        
        //3.加载网页
        [self.webView loadRequest:request];
    
    • UIWebView的相关代理方法
      设置UIWebView的代理属性
    self.webView.delegate = self;
    

    代理方法
    1.即将加载某个网页(请求) 返回值:YES 可以加载该请求 NO 不加载

    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
        NSLog(@"shouldStartLoadWithRequest--%@",request.URL.absoluteString);
        
        NSString *string = request.URL.absoluteString;
        if ([string containsString:@"dushu"]) {
            return NO;
        }
        return YES;
    }
    

    2.开始加载网页的时候调用

    -(void)webViewDidStartLoad:(UIWebView *)webView
    {
        NSLog(@"webViewDidStartLoad");
    }
    

    3.当加载失败或者是错误的时候调用

    -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
    {
        NSLog(@"didFailLoadWithError");
    }
    

    4.加载完成

    -(void)webViewDidFinishLoad:(UIWebView *)webView
    {
        NSLog(@"webViewDidFinishLoad");
        
        self.goback.enabled = self.webView.canGoBack;
        self.goforward.enabled = self.webView.canGoForward;
    }
    
    • UIWebView小案例
      通过UIVebView模拟Safari的界面,并实现界面的前进,后退,刷新等功能
      • 实现界面的前进- (void)goForward;
        [self.webView goForward];   前进
    
    • 实现界面的后退- (void)goBack;
        [self.webView goBack];      回退
    
    • 实现界面的刷新- (void)reload;
        [self.webView reload];      刷新
    
    • 实现界面停止加载- (void)stopLoading;
     [self.webView stopLoading];      停止加载
    
    • 设置前进,后退,刷新的逻辑显示,
      通过代理方法加载完成代理方法和属性实现
      当网页加载完成后,WebView自己就已经知道了是否能后退/前进
      代理方法:
    -(void)webViewDidFinishLoad:(UIWebView *)webView;
    

    属性:

    //能后退
    @property (nonatomic, readonly, getter=canGoBack) BOOL canGoBack;
    //能前进
    @property (nonatomic, readonly, getter=canGoForward) BOOL canGoForward;
    //能加载
    @property (nonatomic, readonly, getter=isLoading) BOOL loading;
    

    代码示例:

    //4.加载完成
    -(void)webViewDidFinishLoad:(UIWebView *)webView
    {
        self.goback.enabled = self.webView.canGoBack;
        self.goforward.enabled = self.webView.canGoForward;
    }
    
    • 拦截webView中的某些请求(或禁止请求包含某些特殊字符串的请求)
      通过代理方法实现
    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
    

    示例代码 :

    //1.即将加载某个网页(请求) 返回值:YES 可以加载该请求 NO 不加载
    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
        NSLog(@"shouldStartLoadWithRequest--%@",request.URL.absoluteString);
        //获取请求中的url,并转换成字符串
        NSString *string = request.URL.absoluteString;
        if ([string containsString:@"dushu"]) {
            return NO;
        }
        return YES;
    }
    
    • 完整小案例
    @interface ViewController ()<UIWebViewDelegate>
    /***拖拽出storyboard中的看属性***/
    @property (weak, nonatomic) IBOutlet UIBarButtonItem *goback;
    @property (weak, nonatomic) IBOutlet UIBarButtonItem *goforward;
    @property (weak, nonatomic) IBOutlet UIWebView *webView;
    @end
    /\
    @implementation ViewController
    /***实现点击 后退,前进,刷新 的功能***/
    -(IBAction)goBackBtn:(UIBarButtonItem *)sender {
        [self.webView goBack];
    }
    -(IBAction)goforwardBtn:(UIBarButtonItem *)sender {
        [self.webView goForward];
    }
    -(IBAction)loadBtn:(UIBarButtonItem *)sender {
        [self.webView reload];
    }
    /\
    /***设置要加载的网页,并加载,设置网页的自适应,设置代理***/
    -(void)viewDidLoad {
        [super viewDidLoad];
        //url
        NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
        //2.request
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [self.webView loadRequest:request];    
        //设置自适应网页
        self.webView.scalesPageToFit = YES;
        //设置代理
        self.webView.delegate = self;
    }
    /\
    /***UIWebView的代理方法***/
    #pragma mark UIWebViewDelegate
    //1.即将加载某个网页(请求) 返回值:YES 可以加载该请求 NO 不加载
    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
        NSLog(@"shouldStartLoadWithRequest--%@",request.URL.absoluteString);
        NSString *string = request.URL.absoluteString;
        if ([string containsString:@"dushu"]) {
            return NO;
        }
        return YES;
    }
    //2.开始加载网页的时候调用
    -(void)webViewDidStartLoad:(UIWebView *)webView
    {
        NSLog(@"webViewDidStartLoad");
    }
    //3.当加载失败或者是错误的时候调用
    -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
    {
        NSLog(@"didFailLoadWithError");
    }
    //4.加载完成
    -(void)webViewDidFinishLoad:(UIWebView *)webView
    {
        NSLog(@"webViewDidFinishLoad");
        self.goback.enabled = self.webView.canGoBack;
        self.goforward.enabled = self.webView.canGoForward;  
    }
    

    相关文章

      网友评论

        本文标题:WebView

        本文链接:https://www.haomeiwen.com/subject/ocpbettx.html