Javascript 在UIWebView中转换接触点以保存内容

Javascript 在UIWebView中转换接触点以保存内容,javascript,ios,objective-c,uiwebview,uigesturerecognizer,Javascript,Ios,Objective C,Uiwebview,Uigesturerecognizer,我一直在尝试保存UIWebView中的图像,当您按住恰好是图像的可见元素时。我正在努力找出如何将UILongPressGestureRecognitor的接触点转换为Javascript获得正确位置所需的点。我认为这和webView的scrollView的内容插入有关,但我不太确定 我将感谢任何提供的帮助 代码: 下面的代码似乎正在为我工作。我必须考虑到UIWebView的UIScrollViewcontentInset.top属性,然后从pt.y中减去它,最后乘以系数f: - (void)lo

我一直在尝试保存
UIWebView
中的图像,当您按住恰好是图像的可见元素时。我正在努力找出如何将
UILongPressGestureRecognitor
的接触点转换为Javascript获得正确位置所需的点。我认为这和webView的scrollView的内容插入有关,但我不太确定

我将感谢任何提供的帮助

代码:


下面的代码似乎正在为我工作。我必须考虑到
UIWebView
UIScrollView
contentInset.top
属性,然后从
pt.y
中减去它,最后乘以系数
f

- (void)longPress:(UILongPressGestureRecognizer *)sender
{
    if (sender.state == UIGestureRecognizerStateBegan)
    {
        CGPoint pt = [sender locationInView:self.webView];

        CGPoint offset;
        offset.x = [[self.webView stringByEvaluatingJavaScriptFromString:@"window.pageXOffset"]integerValue];
        offset.y = [[self.webView stringByEvaluatingJavaScriptFromString:@"window.pageYOffset"]integerValue];

        CGSize windowSize;

        windowSize.width = [[self.webView stringByEvaluatingJavaScriptFromString:@"window.innerWidth"]integerValue];
        windowSize.height = [[self.webView stringByEvaluatingJavaScriptFromString:@"window.innerHeight"]integerValue];

        CGFloat f = windowSize.width / self.webView.frame.size.width;
        pt.x = (pt.x * f);
        pt.y = (pt.y - self.webView.scrollView.contentInset.top) * f;

        NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).tagName", pt.x, pt.y];
        NSString *tagName = [self.webView stringByEvaluatingJavaScriptFromString:js];

        if (tagName && [tagName caseInsensitiveCompare:@"IMG"] == NSOrderedSame)
        {
            NSString *imgURL = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", pt.x, pt.y];
            NSString *urlToDownload = [self.webView stringByEvaluatingJavaScriptFromString:imgURL];

            NSArray *validImageTypes = @[@".jpg",@".jpeg",@".gif",@".tif",@".tiff",@".ico",@".bmp",@".bmpf",@".cur",@".xbm",@".png"];

            for (NSString *sub in validImageTypes)
            {
                if (urlToDownload.length >= sub.length)
                {
                    NSString *extension = [urlToDownload substringFromIndex:MAX(urlToDownload.length - sub.length, 0)];

                    if ([extension caseInsensitiveCompare:sub] == NSOrderedSame)
                    {
                        // Image found, proceed to download (code omitted)
                        break;
                    }
                }
            }
        }
    }
}
- (void)longPress:(UILongPressGestureRecognizer *)sender
{
    if (sender.state == UIGestureRecognizerStateBegan)
    {
        CGPoint pt = [sender locationInView:self.webView];

        CGPoint offset;
        offset.x = [[self.webView stringByEvaluatingJavaScriptFromString:@"window.pageXOffset"]integerValue];
        offset.y = [[self.webView stringByEvaluatingJavaScriptFromString:@"window.pageYOffset"]integerValue];

        CGSize windowSize;

        windowSize.width = [[self.webView stringByEvaluatingJavaScriptFromString:@"window.innerWidth"]integerValue];
        windowSize.height = [[self.webView stringByEvaluatingJavaScriptFromString:@"window.innerHeight"]integerValue];

        CGFloat f = windowSize.width / self.webView.frame.size.width;
        pt.x = (pt.x * f);
        pt.y = (pt.y - self.webView.scrollView.contentInset.top) * f;

        NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).tagName", pt.x, pt.y];
        NSString *tagName = [self.webView stringByEvaluatingJavaScriptFromString:js];

        if (tagName && [tagName caseInsensitiveCompare:@"IMG"] == NSOrderedSame)
        {
            NSString *imgURL = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", pt.x, pt.y];
            NSString *urlToDownload = [self.webView stringByEvaluatingJavaScriptFromString:imgURL];

            NSArray *validImageTypes = @[@".jpg",@".jpeg",@".gif",@".tif",@".tiff",@".ico",@".bmp",@".bmpf",@".cur",@".xbm",@".png"];

            for (NSString *sub in validImageTypes)
            {
                if (urlToDownload.length >= sub.length)
                {
                    NSString *extension = [urlToDownload substringFromIndex:MAX(urlToDownload.length - sub.length, 0)];

                    if ([extension caseInsensitiveCompare:sub] == NSOrderedSame)
                    {
                        // Image found, proceed to download (code omitted)
                        break;
                    }
                }
            }
        }
    }
}