标签:
UIWebView的三种加载方式和其代理
API 提供了三种方法:
1.- (void)loadRequest:(NSURLRequest *)request; //加载HTML链接地址
2.- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL; //加载HTML代码
3.- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;
(1)其中baseURL 是指基准的url 是一个绝对的地址,程序要用到的其他资源就可以根据这个基准地址进行查找而不用再次定位到绝对地址;
为什么需要设置baseURL?
也就是data中有一些链接是图片,css都是外部文件,然后这些文件需要到一个目录上去找。baseURL就是这个目录。
(2)使用loadData方法对文件进行加载,并且指定类型(mimetype)和编码类型(textEncodingName)
一、UIWebView加载.html网页文件(loadRequest)
以下代码都放在viewDidLoad方法体里:
1、加载网络html文件:
NSURL *url = [NSURL URLWithString:@"http://localhost:8080/jmDemo/index.html"]; //@"http//:www.baidu.com"
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_webView loadRequest:request];
2、加载本地html文件,在iphone项目里面
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];
[_webView loadRequest:request];
3、加载本地html文件,不在iphone项目里面,在Documents文件夹里
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"index.html"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_webView loadRequest:request];
二、loadHTMLString:baseURL:(1将本地html文件内容嵌入 2.加载HTML代码 )
(1)将本地html文件内容嵌入
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *filePath = [resourcePath stringByAppendingPathComponent:@"test.html"];
NSString *htmlstring =[[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
[self.webView loadHTMLString:htmlstring baseURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] bundlePath]]];
[self.webView loadHTMLString:htmlstring baseURL:nil];
三、 loadData:MIMEType:textEncodingName:baseURL:
(1)html内容
NSString *string = [NSString stringWithFormat:@"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\">%@",self.model.contentClob];
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
[webContentView loadData:data MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:nil];
(2)加载.html文件
//首先把数据写到NSData中
NSString *pathurl = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSData *data = [NSData dataWithContentsOfFile:pathurl];
//然后设置baseURL
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0] ; //根据自己的具体情况设置,我的html文件在document目 录,链接也是在这个目录上开始
NSURL *baseURL = [NSURL fileURLWithPath:documentsDir];
[self.webView loadData:data MIMEType:@"text/html" textEncodingName:@"GBK" baseURL:baseURL];
四 、其他属性及常用代理
#pragma mark - webView代理方法
/**
* webView开始发送请求的时候就会调用
*/
- (void)webViewDidStartLoad:(UIWebView *)webView
{
// 显示提醒框
[MBProgressHUD showMessage:@"哥正在帮你加载中..."];
}
/**
* webView请求完毕的时候就会调用
*/
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// 隐藏提醒框
[MBProgressHUD hideHUD];
}
/**
* webView请求失败的时候就会调用
*/
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
// 隐藏提醒框
[MBProgressHUD hideHUD];
}
/**
* 当webView发送一个请求之前都会先调用这个方法, 询问代理可不可以加载这个页面(请求)
*
* @return YES : 可以加载页面, NO : 不可以加载页面
*/
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if (写判断) {
// 不加载这个请求
return NO;
}
return YES;
}
标签:
原文地址:http://www.cnblogs.com/junhuawang/p/4607764.html