Getting selected elements programmatically from uiwebview?

别来无恙 提交于 2019-12-22 06:47:41

问题


Currently I am taking this sample website and showing in my webview. The webpage is displaying correctly.

Now I am trying to figure out which data is selected once the user has tapped on the uiwebview.

For this I am able to get the CGPoint for the tap by using UITapGestureRecognizer.

-(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]

I want to get the exact data once user selects the vertical bar in first graph (E.g. 1994/1995/1996).

How to do this?


回答1:


You don't specify what is that is not working for you... anyway, a couple of suggestions:

  1. try with the following js in your tap handler:

    NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).innerHTML", touchPoint.x, touchPoint.y];
    
  2. when creating your tap gesture handler, specify a delegate for it (it can be your controller):

    tap1.delegate = self;
    
  3. in your controller (or web view delegate), define the following delegate method:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:    (UIGestureRecognizer*)otherGestureRecognizer {
        return YES;
    }
    
  4. if you are using iOS 5, have a look at this article about a glitch in elementFromPoint.

By doing like this, I am able to get the exact HTML value for the selected object.




回答2:


If they're all independent DOM elements, you should be able to listen for touchstart events in JavaScript, and when you get the event object, it should have event.target, this will be the element the user clicked on. You can then capture the data you need in JS, and then send it back to Objective-c. The best way to get data from JS to native code is to use a UIWebView delegate, this should hopefully do the trick for you!




回答3:


When user make a selection on the UIWebView, make an AJAX http request, that you can intercept in your UIWebViewDelegate implementing the

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

method.

Then you can accept the request loading, block it, analyze it, do whatever you like with it.



来源:https://stackoverflow.com/questions/9940987/getting-selected-elements-programmatically-from-uiwebview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!