WebView

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;  
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • 一、WebView WebView就是一个内嵌浏览器控件,在iOS中主要有两种WebView:UIWebView和...
    iOS祎阅读 1,080评论 0 2
  • 一、WKWebView简介 在WWDC2014中,苹果推出了最新的iOS8系统,其中也伴随着很多控件的更新与升级。...
    雪上踏痕阅读 2,019评论 1 0
  • AFNNetworking 2.0你相信你一定知道AFNNetworking,不知道你还可以看看该作者的博文,所以...
    瞎嘚嘚阅读 680评论 1 1
  • 1 概念性知识 01 webView是有缺点的,会导致内存泄露,而且这个问题是它系统本身的问题。 02 ...
    奥斯卡先生阅读 1,538评论 0 0
  • h5太火了,越来越多的公司喜欢混合开发。现在公司各种web页面,使用灵活(主要是苹果审核太慢了)。本人在Stack...
    Kan__阅读 3,414评论 2 13