Danilo Costa
Danilo Costa

Reputation: 11

Html form in UIwebview send back to ios?

i am trying to pass information between an HTML form and ios i tryed javascrip but it isn't working?

        // Init Web View
    UIWebView *webView;
    webView = [[UIWebView alloc] initWithFrame:boundsRect];
    webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    webView.scalesPageToFit = YES;
    webView.contentMode = UIViewContentModeCenter;
    webView.multipleTouchEnabled = NO;
    webView.userInteractionEnabled = YES;
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
    [self addSubview:webView];
    NSString *testArrayString = [webView stringByEvaluatingJavaScriptFromString:@"testString"];
    NSArray *testArray = [testArrayString componentsSeparatedByString:@"#"];
    NSLog(@"%@", testArray);
    [webView release];
    return self;

any ideas?

----EDIT----

Ok guys if u only want to make data from a form pass to a ios app you only do this to your webview

[webView setDelegate:self];

Then you can implement this methods in your program marks

like:

    -(void)webViewDidFinishLoad:(UIWebView *) webView {

//implement code to do here

}

if you want to capture a for just do a webview shouldStartWithRequest like this:

    -(BOOL)webView:(UIwebView *) webView shouStartWithRequest:(NSURLRequest *)request  navigationType:(UIWebViewNavigationType)navigation{


//implement code to do afeter the user click the form  don't forget to return YES or NO because it is a BOOL 

}

that is how i solve it any question please do tell me i try my best to help

Upvotes: 1

Views: 1625

Answers (1)

Audun Kjelstrup
Audun Kjelstrup

Reputation: 1430

To pass data from UIWebView and back to your Objective-C runtime, you need to implement UIWebViewDelegates webView:shouldStartLoadingWithRequest: and pass your form-data as parameters in the URL. If you craft all your URL's with a scheme like f.ex. my-app://?parameter1=value1&parameter2=value2, you can easily filter out the URLs the web view should not load, and return NO.

EDIT:

Added example-code.

- (void)initWebView
{
  UIWebView *webView;
  webView = [[UIWebView alloc] initWithFrame:boundsRect];
  webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
  webView.scalesPageToFit = YES;
  webView.contentMode = UIViewContentModeCenter;
  webView.multipleTouchEnabled = NO;
  webView.userInteractionEnabled = YES;
  webView.delegate = self;
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
  NSURL *url = request.URL;
  if ([url.scheme isEqualToString:@"http://"]) {
    return YES;
  }

  else if ([url.scheme isEqualToString:@"my-app://"]){
    // Process data from form
    return NO;
  }
  return YES;
}

EDIT2: You are releasing the web view in your initialisation-code. This prevents the delegate-method from being called when you are loading the form-url

EDIT3: See this question for more code-examples: Invoke method in objective c code from HTML code using UIWebView

Upvotes: 1

Related Questions