2

在我的应用程序中,我有一个 webview,并且想在单独的视图控制器中打开加载在网页中的图像,这很好,我需要做的就是获取图像源的 URL 并将其加载到不同的视图中控制器,我可以做到。

这是我用来获取图像源 URL 的代码。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
        CGPoint touchPoint = [touch locationInView:self.view];

        NSString *imageSRC = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", touchPoint.x, touchPoint.y];
        NSString *srcOfImage = [webView stringByEvaluatingJavaScriptFromString:imageSRC];
        NSLog(@"src:%@",srcOfImage);
    }
    return YES;
}

现在,我的问题是,有时,当图像可能带有链接(即标签)时,webview 将加载链接,而图像在我的单独视图控制器中打开。我想做的是,如果存在链接,请阻止 webview 打开链接(仅图像中的链接)。关于我如何实现这一目标的任何指示?

4

1 回答 1

3

终于想通了,答案就在于UIWebViewDelegate。对于任何有兴趣的人,这就是我解决它的方法..

bool isImage;

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
        CGPoint touchPoint = [touch locationInView:self.view];

        NSString *imageSRC = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", touchPoint.x, touchPoint.y];
        NSString *srcOfImage = [webView stringByEvaluatingJavaScriptFromString:imageSRC];
        NSLog(@"src:%@",srcOfImage);
        NSURL *imgsrcURL = [NSURL URLWithString:srcOfImage];
        if (imgsrcURL && imgsrcURL.scheme && imgsrcURL.host) {
            isImage = TRUE;
        }
    }
    return YES;
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if ((navigationType == UIWebViewNavigationTypeLinkClicked) && (isImage)) {
        return NO;
        isImage = FALSE;
    } else {
        return YES;
    }
}
于 2013-02-17T09:33:19.127 回答