目前我正在使用this sample website并在我的网页浏览中显示。网页显示正确。
现在我试图找出用户点击uiwebview后选择了哪些数据。
为此,我可以使用UITapGestureRecognizer
获取点击CGPoint。
-(void)singleTap:(UIGestureRecognizer *)gestureRecognizer
{
CGPoint touchPoint = [gestureRecognizer locationInView:myWebView];
NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).toString()", touchPoint.x, touchPoint.y];
NSString * tagName = [myWebView stringByEvaluatingJavaScriptFromString:js];
NSLog(@"Selected Name: %@",tagName);
}
// In log it is displaying [object SVGPathElement]
一旦用户选择第一张图中的垂直条,我想获得准确的数据 (例如1994/1995/1996)。
怎么做?
答案 0 :(得分:2)
你没有指明什么对你不起作用......无论如何,有几点建议:
在点击处理程序中尝试使用以下js:
NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).innerHTML", touchPoint.x, touchPoint.y];
创建点击手势处理程序时,为其指定一个委托(可以是您的控制器):
tap1.delegate = self;
在控制器(或Web视图委托)中,定义以下委托方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer*)otherGestureRecognizer {
return YES;
}
如果您使用的是iOS 5,请查看this article about a glitch in elementFromPoint
。
通过这样做,我能够获得所选对象的确切HTML值。
答案 1 :(得分:0)
如果它们都是独立的DOM元素,你应该能够在JavaScript中监听touchstart事件,当你获得事件对象时,它应该有 event.target ,这将是是用户点击的元素。然后,您可以在JS中捕获所需的数据,然后将其发送回Objective-c。从JS获取数据到本机代码的最佳方法是使用UIWebView delegate,这应该可以帮到你!
答案 2 :(得分:0)
当用户在UIWebView上做出选择时,发出一个AJAX http请求,你可以在UIWebViewDelegate中拦截实现
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
方法
然后你就可以接受请求加载,阻止它,分析它,随你做任何你想做的事。