当前位置 博文首页 > xixi:iOS 获取 WKWebView 里面图片

    xixi:iOS 获取 WKWebView 里面图片

    作者:[db:作者] 时间:2021-07-29 15:47

    背景:打开的文章H5能不能点击放大图片预览 并且保存啊?

    首先我们需要获取到 用户点击的范围所在的 图片
    那么我们可以做一个WKWebView 来专门处理这个事情。

    WKWebView (Images)
    
    -(void) addTapImageGesture
    {
        UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureAction:)];
        tapGesture.numberOfTapsRequired = 1;
        tapGesture.delegate = (id)self;
        [self addGestureRecognizer:tapGesture];
    }
    
    //这里增加手势的返回,不然会被WKWebView拦截
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    {
        return YES;
    }
    
    
    -(void) tapGestureAction:(UITapGestureRecognizer *)recognizer
    {
    	//首先要获取用户点击在WKWebView 的范围点
        CGPoint touchPoint = [recognizer locationInView:self];
        NSString *imgURLJS = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", touchPoint.x, touchPoint.y];
        //跟着注入JS 获取 异步获取结果
        [self evaluateJavaScript:imgURLJS completionHandler:^(id result, NSError * _Nullable error) {
            if (error == nil)
            {
                NSString *url = result;
                if (url.length == 0)
                {
                    return ;
                }
                else
                {
                //如果是url 则转换成 UIImage
                    NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
                    UIImage *clickImg = [UIImage imageWithData:imgData];
                    if (clickImg)
                    {
                        NSArray *imgArr = @[url];
                        NSMutableArray *tempArray = [[NSMutableArray alloc] init];
                        [tempArray addObject:clickImg];
                        //将图片 存起来 ,然后可以放到 预览控件里面去了
                        [self setImgUrlArrayKey:[tempArray copy]];
    
                       //to do 这里就可以将图片放在你想要放在的 图片预览控件里面了
                    }
                    
                }
            }
        }];
    }
    

    最后我们可以在 WKWebView 的 delegate 加载完成的 回调里面增加使用

    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
    {
        [self.webView addTapImageGesture];
    }
    
    
    cs
    下一篇:没有了