//MARK: -- 加载完成
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation 中加入js代码
//js方法遍历图片添加点击事件 返回图片个数
逻辑:
1.遍历获取全部的图片;(只获取detail-main div下的图片,需要哪个下的图片就取哪个上的所有图片)
2.生成一个Srting为所有图片的拼接,拼接时拿到所处数组下标;
3.为图片添加点击事件,并添加数组所处下标
注意点:
1.如果仅仅拿到url而无下标的话,网页中如果有多张相同地址的图片 则会发生位置错乱
2.声明时不要用 var yong let 不然方法添加的i 永远是length的值
*/
static NSString * const jsGetImages =
@"function getImages(){\
var objs = document.querySelectorAll(\".detail-main img\");\
var imgScr = '';\
for(let i=0;i<objs.length;i++){\
imgScr = imgScr + objs[i].src +'LQXindex'+ i +'L+Q+X';\
objs[i].οnclick=function(){\
document.location=\"myweb:imageClick:\"+this.src + 'LQXindex' + i;\
};\
};\
return imgScr;\
};";
[webView evaluateJavaScript:jsGetImages completionHandler:^(id _Nullable result, NSError * _Nullable error) {
}];
//注入自定义的js方法后别忘了调用 否则不会生效
[webView evaluateJavaScript:@"getImages()" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSString *urlResurlt = result;
allUrlArray = [NSMutableArray arrayWithArray:[urlResurlt componentsSeparatedByString:@"L+Q+X"]];
if (allUrlArray.count >= 2) {
[allUrlArray removeLastObject];// 此时数组为每一个图片的url
}
}];
然后在wkwebview的代理方法
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler中处理
//hasPrefix 判断创建的字符串内容是否以pic:字符开始
if ([requestString hasPrefix:@"myweb:imageClick:"]) {
NSString *imageUrl = [requestString substringFromIndex:@"myweb:imageClick:".length];
if (self.photoView) {
//设置不隐藏,还原放大缩小,显示图片
self.photoView.hidden = NO;
self.photoView.alpha = 1.0;
NSArray *imageIndex = [NSMutableArray arrayWithArray:[imageUrl componentsSeparatedByString:@"LQXindex"]];
int i = [imageIndex.lastObject intValue];
self.photoView.currentIndex = i;
}else{
[self showBigImage:imageUrl];//创建视图并显示图片
}
#pragma mark 显示大图片
-(void)showBigImage:(NSString *)imageUrl{
//创建灰色透明背景,使其背后内容不可操作
NSArray *imageIndex = [NSMutableArray arrayWithArray:[imageUrl componentsSeparatedByString:@"LQXindex"]];
int i = [imageIndex.lastObject intValue];
self.photoView = [[CCBigImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) images:allUrlArray imageIndex:i];
self.photoView.backgroundColor = [UIColor blackColor];
[self.view addSubview: