【问题标题】:Converting touch points in UIWebView to save content转换 UIWebView 中的触摸点以保存内容
【发布时间】:2023-03-26 06:05:01
【问题描述】:

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

如果能提供任何帮助,我将不胜感激。

代码:

- (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;
                    }
                }
            }
        }
    }
}

【问题讨论】:

    标签: javascript ios objective-c uiwebview uigesturerecognizer


    【解决方案1】:

    下面的代码现在似乎对我有用。我必须考虑UIWebViewUIScrollView 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;
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多