前面对UIWebView的简单使用做了些介绍,下面进一步介绍UIWebView。我们可以利用UIWebView在网页加载过程中对网页做一些操作。这里用到了javascript脚本语言。下面我们就在一个.html文件的源代码中做一些修改,以达到某些操作(这里是删除一些内容)。在HTML源代码中添加如下代码
<script type="text/javascript">
function removeAd()
{
// getElementsByTagName可能会获得很多footer标签
// 根据标签删除
document.getElementsByTagName('footer')[0].remove();
document.getElementsByTagName('header')[0].remove();
// 根据id删除
// document.getElementsById('')
}
</script>
<br>
<input type="button" value="去除广告" οnclick="removeAd();">
<br>
编辑完,保存。利用网页打开该网页,会出现如下按钮:
上面就是要被删除的部分。点击该按钮,内容就会被删除。如下
但这要修改源代码才能做到,那么我们如何利用UIWebView在网页正在加载的过程中去删除内容呢。使用如下代码即可:
-(IBAction)removeAd:(id)sender {
// 拼接javascript代码
// 弹框
// [self.webView stringByEvaluatingJavaScriptFromString:@"alert(10);"];
// 移除广告操作(拼接javascript代码)
[self.webViewstringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('footer')[0].remove();"];
}
运行效果:
这样就做到了在OC中使用javascript代码做一些操作了。
上面是介绍在OC中使用javascript代码,那下面就介绍如何在javascript中调用OC代码,如:网页中有一个按钮“打开相册”,点击按钮,就打开手机相册。
HTML源代码如下:
<html>
<head>
<title>测试标题</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body>
<!-- 一点击按钮,就会调用script中的openAlbum函数,webView就加载ios://openMyAlbum(随便写的)远程资源-->
<input type="button" value="打开相册" οnclick="openAlbum();">
</body>
<script type="text/javascript">
function openAlbum()
{
window.location.href = 'ios://openMyAlbum';
}
</script>
</html>
在OC中,我们利用代理监听webView加载过程,在代理方法中,拦截请求(该请求的作用只是用于标示作用),判断请求,再调用方法,打开手机相册。
- (void)loadTestHtml {
// 加载本地资源的URL路径
NSURL *url = [[NSBundle mainBundle] URLForResource:@"Test.html" withExtension:nil];
NSURLRequest *reqeust = [NSURLRequest requestWithURL:url];
// 设置webView的代理
self.webView.delegate = self;
// 加载资源
[self.webView loadRequest:reqeust];
}
#pragma mark - UIWebViewDelegate
/**
* webView在发生请求request之前,会调用该方法,询问是否可以加载该请求request,YES:可以加载,NO:不可以加载
*/
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *url = request.URL.absoluteString;
NSRange range = [url rangeOfString:@"ios://"];
if (range.length != 0) {// 有ios://openMyAlbum远程加载请求,告诉应用打开相册
NSString *method = [url substringFromIndex:range.location + range.length];
// 打开相册
// 将字符串转换成方法名
SEL selector = NSSelectorFromString(method);
[self performSelector:selector withObject:nil];
return NO;// 不允许这次请求通过
}
return YES;
}
/**
* 打开相册
*/
- (void)openMyAlbum {
// 创建相册控制器
UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
// 图片来源:相册
ipc.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
// 跳转至相册控制器
[self presentViewController:ipc animated:YES completion:nil];
}
运行效果:
OC中调用javascript代码,javascript中调用OC方法,这样就实现了OC和javascript的交互。