一、简单介绍
1.简单说明
UIWebView是iOS内置的浏览器控件
系统自带的Safari浏览器就是通过UIWebView实现的
UIWebView不但能加载远程的网页资源,还能加载绝⼤部分的常见文件 html\htm pdf、doc、ppt、txt mp4 ......
2.UIWebView常⽤的加载资源的方法
-(void)loadRequest:(NSURLRequest *)request;
3.常用的属性和方法
重新加载(刷新) - (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) BOOLscalesPageToFit;
4.监听UIWebView的加载过程
成为UIWebView的代理,遵守UIWebViewDelegate协议,就能监听UIWebView的加载过程
开始发送请求(加载数据)时调用这个方法
-(void)webViewDidStartLoad:(UIWebView *)webView;
请求完毕(加载数据完毕)时调⽤这个方法
-(void)webViewDidFinishLoad:(UIWebView *)webView;
请求错误时调用这个方法
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
在加载的过程中,如果所要加载的内容比较长,在加载的时候,就会不断的调用开始加载数据和完成加载数据的这两个函数,知道所要加载的内容完成为止;
5.监听UIWebView的加载过程
UIWebView在发送请求之前,都会调⽤用这个⽅方法,如果返回NO,代表停⽌止加载 请求,返回YES,代表允许加载请求
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType;
6.在代码中加入js
UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS中与UIWebView中的网页元素交互。
如:NSString *title = [webview stringByEvaluatingJavaScriptFromString:@"document.title"];
实例代码(具体请看:‘UI_web内容显示forIpad’ 项目):
#import "WebContaintViewController.h"
@interface WebContaintViewController ()<UIWebViewDelegate>
@property (nonatomic, weak) UIWebView*webView;
@end
@implementation WebContaintViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self= [super initWithNibName:nibNameOrNilbundle:nibBundleOrNil];
if(self) {
//Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)loadView
{
[superloadView];
//创建一个UIWebView
UIWebView*webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];
self.webView = webView;
//设置页面尺寸是否可以改变 yes为可以改变
webView.scalesPageToFit = YES;
//设置代理
webView.delegate = self;
[self.view addSubview:webView];
//创建一个url
NSURL*url = [NSURL URLWithString:@"http://www.baidu.com"];
//创建一个url请求
NSURLRequest*request = [NSURLRequest requestWithURL:url];
//webView加载url请求
[webView loadRequest:request];
}
// 隐藏掉状态栏
- (BOOL)prefersStatusBarHidden
{
return YES;
}
#pragma -mark UIWebView 代理
/**
* 开始加载页面的时候触发
*
* @paramwebView 当前的webView
*/
- (void)webViewDidStartLoad:(UIWebView *)webView
{
NSLog(@"开始加载页面!~");
}
/**
* 页面加载完成
*/
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//判断是否还在加载,如果还在加载,则不执行加载完成后的操作
if(NO == webView.loading){
NSLog(@"页面加载完成,可以在这里处理html里面的元素");
//只加载部分数据
NSString*str = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('div').getElementsById('primary').outerHTML;"];
NSLog(@"加载部分内容:%@",str);
NSString *currentURL =[webView stringByEvaluatingJavaScriptFromString:@"document.location.href"];
NSLog(@"url:%@",currentURL);
}
}
/**
* 页面请求失败的时候
*/
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
NSLog(@"页面加载失败!~");
}
@end