转换 UIWebView 中的触摸点以保存内容
Converting touch points in UIWebView to save content
当您按住恰好是图像的可见元素时,我一直在尝试保存 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;
}
}
}
}
}
}
下面的代码似乎对我有用。我不得不考虑 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;
}
}
}
}
}
}
当您按住恰好是图像的可见元素时,我一直在尝试保存 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;
}
}
}
}
}
}
下面的代码似乎对我有用。我不得不考虑 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;
}
}
}
}
}
}