【问题标题】:Getting selected elements programmatically from uiwebview?从 uiwebview 以编程方式获取选定的元素?
【发布时间】:2012-04-14 00:30:42
【问题描述】:

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

如何做到这一点?

【问题讨论】:

  • HTML页面是否在你的控制之下?
  • 不,它不在我的控制之下。但您仍然可以提出您的建议 :)

标签: javascript iphone ipad uiwebview


【解决方案1】:

你没有具体说明什么不适合你......无论如何,有几个建议:

  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

通过这样做,我可以获得所选对象的准确 HTML 值。

【讨论】:

  • 请注意,这不适用于 Google 图片或其他以有趣方式显示图片的网站...
【解决方案2】:

当用户在 UIWebView 上进行选择时,发出一个 AJAX http 请求,您可以在 UIWebViewDelegate 中拦截该请求来实现

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

方法。

然后你可以接受请求加载,阻止它,分析它,做任何你喜欢的事情。

【讨论】:

    【解决方案3】:

    如果都是独立的 DOM 元素,你应该可以在 JavaScript 中监听 touchstart 事件,当你获取到事件对象时,它应该有 event.target,这将是用户点击的元素。然后你可以在 JS 中捕获你需要的数据,然后将其发送回 Objective-c。将数据从 JS 获取到本机代码的最佳方式是使用 UIWebView delegate,希望这对您有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多