iOS开发 : UIWebView加载网页以及与JavaScript交互

使用UIWebView可以实现一个Web浏览器,可以时间加载静态HTML、动态URL地址,也可以实现网页导航,以及调用JavaScript等。

一、加载一个动态URL地址的步骤:

// 1. 实例化一个UIWebView
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];

// 2. 获得NSURLRequest对象
NSString *str = @"http://www.baidu.com";
NSURL *url = [NSURL URLWithString:str];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

// 3. 调用UIWebView的loadRequest方法加载网页内容
[webView loadRequest:request];

二、使用UIWebView加载静态的HTML页面

// 1. 实例化UIWebView
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];

// 2. 以字符串的形式保存HTML代码
NSString *str = @"Hello<b>你好</b>....<a href = http://www.baidu.com>百度一下</a>";

// 3. 使用UIWebView的loadHTMLString:baseURL方法加载页面
[webView loadHTMLString:str baseURL:nil];

// 4. 将webView添加到控制器的view上
[self.view addSubview:webView];

三、可以为UIWebView设置代理来监控UIWebView的加载过程。下面代码演示了如何在显示网页之前显示加载进度标识

  1. 遵守UIWebViewDelegate协议
@interface TestViewController () <UIWebViewDelegate>
@property (nonatomic,weak) UIWebView *webView;
@property (nonatomic,weak) UIActivityIndicatorView *aiv;
@end
  1. 实例化UIWebView和UIActivityIndicatorView
// 实例化UIWebView
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];

// 实例化UIActivityIndicatorView
UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(50, 100, 100, 100)];

// 设置UIWebView的代理
webView.delegate = self;

// 设置UIActivityIndicatorView的样式
aiv.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;

//  设置UIActivityIndicatorView的中心点位置与UIWebView相同
aiv.center = webView.center;
self.webView = webView;
self.aiv = aiv;
  1. 实例化NSURLRequest对象,并加载网页
// 设置要访问的网络URL
NSString *str = @"http://www.baidu.com";

// 实例化NSURL
NSURL *url = [NSURL URLWithString:str];

// 实例化NSURLRequest
NSURLRequest *request = [NSURLRequest requestWithURL:url];

// 加载网页
[webView loadRequest:request];

// 添加UIActivityIndicatorView到UIWebView
[webView addSubview:aiv];
[self.view addSubview:webView];
  1. 实现协议方法
// 开始加载网页时会来到该方法
- (void)webViewDidStartLoad:(UIWebView *)webView
{
// 开始执行动画
[self.aiv startAnimating];
self.aiv.hidden = NO;
}

// 网页已经加载完成时会来到该方法
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// 停止动画
[self.aiv stopAnimating];
self.aiv.hidden = YES;
}

四、UIWebView和网页的JavaScript之间可以相互通信。下面代码在界面添加一个按钮和UIWebView,点击按钮调用JavaScript代码中的方法弹出提示框

  1. 在界面添加一个按钮和UIWebView
//  创建UIWebView对象
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];

// 创建一个按钮
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(120, 80, 60, 40)];
[btn setTitle:@"testBtn" forState:UIControlStateNormal];
[btn setBackgroundColor:[UIColor greenColor]];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(clickBtn) forControlEvents:UIControlEventTouchUpInside];

// 将按钮和UIWebView添加到控制器的view
[self.view addSubview:webView];
[self.view addSubview:btn];
  1. 动态拼接HTML和JavaScript,并使用UIWebView加载页面
NSMutableString *mStr = [NSMutableString stringWithCapacity:20];

[mStr appendString:@"<html>"];
[mStr appendString:@"<head>"];
[mStr appendString:@"<script>"];
[mStr appendString:@"function showAlert() {alert('Hello')}"];
[mStr appendString:@"</script>"];
[mStr appendString:@"</head>"];
[mStr appendString:@"<body>"];
[mStr appendString:@"Test JavaScript"];
[mStr appendString:@"<b>"];
[mStr appendString:@"nihao"];
[mStr appendString:@"</b>"];
[mStr appendString:@"</body>"];
[mStr appendString:@"</html>"];

// 加载页面
[webView loadHTMLString:mStr baseURL:nil];
  1. 在按钮的点击事件方法中加载JavaScript函数
- (void)clickBtn
{
[self.webView stringByEvaluatingJavaScriptFromString:@"showAlert()"];
}

如果要添加index.html文件,先将index.html文件导入项目,然后获取文件路径,利用stringWithContentsOfFile获取内容展示页面

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
[self.webView loadHTMLString:[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil] baseURL:nil];

五. UIWebView界面实现前进、后退和刷新功能

// 前进
[self.webView goForward];

// 后退
[self.webView goBack];

// 刷新
[self.webView reload];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容