什么是UIWebView
UIWebView是iOS内置的浏览器控件
系统自带的Safari浏览器就是通过UIWebView实现的
UIWebView不但能加载远程的网页资源,还能加载绝大部分的常见文件
html\htm
pdf、doc、ppt、txt
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代码
使用UIWebView的stringByEvaluatingJavaScriptFromString方法即可
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
浙公网安备 33010602011771号