UIWebView

什么是UIWebView

UIWebViewiOS内置的浏览器控件

系统自带的Safari浏览器就是通过UIWebView实现的

 

UIWebView不但能加载远程的网页资源,还能加载绝大部分的常见文件

html\htm

pdfdocppttxt

mp4

… …

 

UIWebView常用的加载资源的方法

- (void)loadRequest:(NSURLRequest *)request;

 

键盘工具条显示中文

 

 

常用属性和方法

重新加载(刷新)

- (void)reload; 

停止加载

- (void)stopLoading;

回退

- (void)goBack;

前进

- (void)goForward; 

需要进行检测的数据类型

@property(nonatomic) UIDataDetectorTypes dataDetectorTypes

 

是否能回退

@property(nonatomic,readonly,getter=canGoBack) BOOL canGoBack;

 

是否能前进

@property(nonatomic,readonly,getter=canGoForward) BOOL canGoForward;

 

是否正在加载中

@property(nonatomic,readonly,getter=isLoading) BOOL loading;

 

是否伸缩内容至适应屏幕当前尺寸

@property(nonatomic) BOOL scalesPageToFit;

 

监听UIWebView的加载过程

成为UIWebView的代理,遵守UIWebViewDelegate协议,就能监听UIWebView的加载过程

开始发送请求(加载数据)时调用这个方法

- (void)webViewDidStartLoad:(UIWebView *)webView;

 

请求完毕(加载数据完毕)时调用这个方法

- (void)webViewDidFinishLoad:(UIWebView *)webView;

 

请求错误时调用这个方法

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;

 

UIWebView在发送请求之前,都会调用这个方法,如果返回NO,代表停止加载请求,返回YES,代表允许加载请求

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

 

OC中调用JavaScipt

如何在OC中调用JavaScript代码

使用UIWebViewstringByEvaluatingJavaScriptFromString方法即可

 

  1 //
  2 //  YYOAuthViewController.m
  3 //
  4 
  5 #import "YYOAuthViewController.h"
  6 #import "MBProgressHUD+MJ.h"
  7 
  8 @interface YYOAuthViewController ()<UIWebViewDelegate>
  9 
 10 @end
 11 
 12 @implementation YYOAuthViewController
 13 
 14 - (void)viewDidLoad
 15 {
 16     [super viewDidLoad];
 17     
 18     //1.创建UIWebView
 19     UIWebView *webView=[[UIWebView alloc]init];
 20     webView.frame=self.view.bounds;
 21     [self.view addSubview:webView];
 22 
 23     
 24     //2.加载登陆界面
 25     NSURL *url=[NSURL URLWithString:@"https://api.weibo.com/oauth2/authorize?client_id=1972915028&redirect_uri=http://www.cnblogs.com/wendingding/"];
 26     NSURLRequest *request=[[NSURLRequest alloc]initWithURL:url];
 27     [webView loadRequest:request];
 28     
 29     //3.设置代理
 30     webView.delegate=self;
 31 }
 32 
 33 #pragma mark-UIWebViewDelegate
 34 /**
 35  *  UIWebView开始加载资源的时候调用(开始发送请求)
 36  */
 37 -(void)webViewDidStartLoad:(UIWebView *)webView
 38 {
 39     [MBProgressHUD showMessage:@"正在努力加载中···"];
 40 }
 41 
 42 /**
 43  *  UIWebView加载完毕的时候调用(请求结束)
 44  */
 45 -(void)webViewDidFinishLoad:(UIWebView *)webView
 46 {
 47     [MBProgressHUD hideHUD];
 48 }
 49 
 50 /**
 51  *  UIWebView加载失败的时候调用(请求失败)
 52  */
 53 -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
 54 {
 55     [MBProgressHUD hideHUD];
 56 }
 57 
 58 /**
 59  *  UIWebView每当发送一个请求之前,都会先调用这个代理方法(询问代理允不允许加载这个请求)
 60  *  @param request        即将发送的请求
 61  *  @return YES允许加载,NO不允许加载
 62  */
 63 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
 64 {
 65     //1.获得请求地址
 66     NSString *urlStr=request.URL.absoluteString;
 67     NSLog(@"%@",urlStr);
 68     
 69     //2.判断url是否为回调地址
 70     /*
 71      https://api.weibo.com/oauth2/authorize?client_id=1972915028&redirect_uri=http://www.cnblogs.com/wendingding/
 72      https://api.weibo.com/oauth2/authorize
 73      https://api.weibo.com/oauth2/authorize#
 74      
 75      https://api.weibo.com/oauth2/authorize
 76      range.location==(-1)NSNoFound
 77      range.length==0
 78      http://www.cnblogs.com/wendingding/?code=c3dca3b51ab954bac42ebdb253661e4d
 79      range.location==0
 80      range.length>0
 81      */
 82     //urlStr在字符串中的范围
 83     //设置从等号位置开始,不用再额外的找位置
 84     NSRange range=[urlStr rangeOfString:@"http://www.cnblogs.com/wendingding/?code="];
 85     //判断是否为回调地址
 86     if (range.location!=NSNotFound) {//是回调地址
 87         //截取授权成功后的请求标记
 88         int from=range.location+range.length;
 89         NSString *code=[urlStr substringFromIndex:from];
 90         YYLog(@"%@--%@--",urlStr,code);
 91         
 92         //根据code获得一个accessToken
 93         [self accessTokenWithCode:code];
 94         
 95         //禁止加载回调页面,拿到想要的东西就好了。
 96         return NO;
 97     }
 98     return YES;
 99 }
100 /**
101  *  根据code获得一个accessToken
102  *  @param code 授权成功后的请求标记
103  */
 -(void)accessTokenWithCode:(NSString *)code
 {
     //处理操作....
 }
 @end

 

 

posted on 2015-08-23 08:31  pTrack  阅读(159)  评论(0)    收藏  举报