在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;
}
}
}
}
}
}
相关文章:
- 触摸移动时切换到新元素
- 如何将getJson的响应保存在全局变量中
- 按下按钮时保存cookie
- 如何使用 Angular JS 将数据保存在数据库中
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- HTML5在画布中加载较小的图像并保存实际大小的图像
- 是否可以在浏览器中使用纯JavaScript保存音频流
- 如何将多个画布保存为一个图像
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 如何将乳胶配方奶粉图像保存到Asp.net中的文件夹中
- 保存数组javascript
- ng消息仅在触摸时显示错误,并在错误的初始显示上转换
- iOS 中的按钮触摸状态
- 如何在jquery中找到鼠标滚轮/触摸移动事件的走向
- 如何使用纯javascript的移动触摸事件
- 保存串行端口列表与流星
- 在UIWebView中转换触摸点以保存内容
- 如何在画布上绘制(使用鼠标/触摸)、保存绘制的对象、存储、加载和操作
- 煎茶触摸 2 模型关联保存不正确的数据进行存储