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