@property (
nonatomic,copy) 
NSString *imgURL;
   
UIWebView *_web;
   
NSInteger _gesState;
- (
void)webViewDidFinishLoad:(
UIWebView *)webView{
    [MBProgressHUD hideHUD];
    
    
static NSString* 
const kTouchJavaScriptString=
    @
"document.ontouchstart=function(event){\
    x=event.targetTouches[0].clientX;\
    y=event.targetTouches[0].clientY;\
    document.location=\"myweb:touch:start:\"+x+\":\"+y;};\
    document.ontouchmove=function(event){\
    x=event.targetTouches[0].clientX;\
    y=event.targetTouches[0].clientY;\
    document.location=\"myweb:touch:move:\"+x+\":\"+y;};\
    document.ontouchcancel=function(event){\
    document.location=\"myweb:touch:cancel\";};\
    document.ontouchend=function(event){\
    document.location=\"myweb:touch:end\";};";
    [webView stringByEvaluatingJavaScriptFromString:kTouchJavaScriptString];
}
- (
BOOL)webView:(
UIWebView *)webView shouldStartLoadWithRequest:(
NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    
    
NSString *requestString =  request
.URL.absoluteString;
    
NSArray *components = [requestString componentsSeparatedByString:@
":"];
    
if ([components count] > 
1 && [(
NSString *)[components objectAtIndex:
0]
                                   isEqualToString:@
"myweb"]) {
        
if([(
NSString *)[components objectAtIndex:
1] isEqualToString:@
"touch"])
        {
            
            
if ([(
NSString *)[components objectAtIndex:
2] isEqualToString:@
"start"])
            {
                _gesState = UIGestureRecognizerStateBegan;
                
float ptX  =[[components objectAtIndex:
3]floatValue];
                
float ptY =[[components objectAtIndex:
4]floatValue];
                
NSString *js = [
NSString stringWithFormat:@
"document.elementFromPoint(%f, %f).tagName", ptX, ptY];
                
NSString * tagName = [_web stringByEvaluatingJavaScriptFromString:js];
                
if ([tagName isEqualToString:@
"IMG"]) {
                    
self.imgURL = [
NSString stringWithFormat:@
"document.elementFromPoint(%f, %f).src", ptX, ptY];
                }
                
if (
self.imgURL) {
                    [
self performSelector:
@selector(handleLongTouch) withObject:
nil afterDelay:
1.0];
                }
            }
            
else if ([(
NSString *)[components objectAtIndex:
2] isEqualToString:@
"move"])
            {
                _gesState = UIGestureRecognizerStateChanged;
            }
        }
        
else if ([(
NSString*)[components objectAtIndex:
2]isEqualToString:@
"end"]) {
            _gesState = UIGestureRecognizerStateEnded;
        }
    }
    
return YES;
}
- (
void)handleLongTouch {
    
if (
self.imgURL && _gesState == UIGestureRecognizerStateBegan) {
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:
nil message:
nil preferredStyle:UIAlertControllerStyleActionSheet];
        
NSString *urlToSave = [_web stringByEvaluatingJavaScriptFromString:
self.imgURL];
        NSData* data = [NSData dataWithContentsOfURL:[
NSURL URLWithString:urlToSave]];
        
UIImage* image = [
UIImage imageWithData:data];
        
NSDictionary *options = [[
NSDictionary alloc] initWithObjectsAndKeys:
                                 @
"CIDetectorAccuracy", @
"CIDetectorAccuracyHigh",
nil];
        CIDetector *detector = 
nil;
        
if ([[UIDevice currentDevice]
.systemVersion floatValue] >= 
8.0)
            detector = [CIDetector detectorOfType:CIDetectorTypeQRCode
                                          context:
nil
                                          options:options];
        
NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:image
.CGImage]] ;
        
        UIAlertAction *judgeCode = [UIAlertAction actionWithTitle:@
"识别图中二维码" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            CIQRCodeFeature *feature = [features objectAtIndex:
0];
            
NSString *scannedResult = feature
.messageString;
            
if ([[
UIApplication sharedApplication] canOpenURL:[
NSURL URLWithString:scannedResult]]){
                [[
UIApplication sharedApplication] openURL:[
NSURL URLWithString:scannedResult]];
            }
else{
                [MBProgressHUD showError:@
"无法识别的网址"];
            }
        }];
        
        UIAlertAction *saveImage = [UIAlertAction actionWithTitle:@
"保存到手机" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            UIImageWriteToSavedPhotosAlbum(image, 
self, 
@selector(image:didFinishSavingWithError:contextInfo:), 
nil);
        }];
        
        UIAlertAction *cancell = [UIAlertAction actionWithTitle:@
"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        }];
        
if (features
.count >= 
1) {
            [alertController addAction:judgeCode];
        }
        [alertController addAction:saveImage];
        [alertController addAction:cancell];
        [
self presentViewController:alertController animated:
YES completion:
nil];
    }
}