正常情况下,UIWebView中的内容是不能操作的(除了copy之类的),当然图片更不能操作,但是能不能实现点击图片来做一些其他处理呢?比如点击图片,跳转到单独显示该图片的页面,答案是肯定的,而且相当简单!这里用到了javascript。
[_webView loadHTMLString:htmlStringbaseURL:nil];
(1)[_webView stringByEvaluatingJavaScriptFromString:jsString];
这里的jsStirng是从工程中的js文件读取的,也可以直接写字符串(如果内容比较少的情况下)。js文件内容如下:
//setImage的作用是为页面的中img元素添加onClick事件,即设置点击时调用imageClick
function setImage(){
var imgs = document.getElementsByTagName("img");
for (var i=0;i<imgs.length;i++){
var src = imgs[i].src;
imgs[i].setAttribute("onClick","imageClick(src)");
}
document.location = imageurls;
}
//imageClick即图片 onClick时触发的方法,document.location = url;的作用是使调用
//webView: shouldStartLoadWithRequest: navigationType:方法,在该方法中我们真正处理图片的点击
function imageClick(imagesrc){
var url="imageClick:"+imagesrc;
document.location = url;
}
(2)网页加载完毕后,为img元素添加onClick事件,即onClick触发上述js文件中的setImage方法
- (void)webViewDidFinishLoad:(UIWebView *)webView{
[_webView stringByEvaluatingJavaScriptFromString:@"setImage()"];
}
在webViewDidFinishLoad方法中为页面嵌入javascript代码。即调用上面js文件中的setImage方法。第三步:处理点击事件
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
NSString *requestString = [[request URL] absoluteString];
NSArray *components = [requestString componentsSeparatedByString:@":"];
if ([components count] >= 1) {
//判断是不是图片点击
if ([(NSString *)[componentsobjectAtIndex:0]isEqualToString:@"imageclick"]) {
UIAlertView *alert = [[UIAlertViewalloc]
initWithTitle:@"click"
message:components[1]
delegate:selfcancelButtonTitle:nil
otherButtonTitles:@"OK",nil];
[alert show];
return NO;
}
return YES;
}
return YES;
}
我这里实现的只是点击图片弹出AlertView,你可以根据需求做其他任何处理!