从uiwebview以编程方式获取所选元素?

时间:2012-03-30 10:11:11

标签: javascript iphone ipad uiwebview

目前我正在使用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)。

怎么做?

3 个答案:

答案 0 :(得分:2)

你没有指明什么对你不起作用......无论如何,有几点建议:

  1. 在点击处理程序中尝试使用以下js:

    NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).innerHTML", touchPoint.x, touchPoint.y];
    
  2. 创建点击手势处理程序时,为其指定一个委托(可以是您的控制器):

    tap1.delegate = self;
    
  3. 在控制器(或Web视图委托)中,定义以下委托方法:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:    (UIGestureRecognizer*)otherGestureRecognizer {
        return YES;
    }
    
  4. 如果您使用的是iOS 5,请查看this article about a glitch in elementFromPoint

  5. 通过这样做,我能够获得所选对象的确切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;

方法

然后你就可以接受请求加载,阻止它,分析它,随你做任何你想做的事。