Call objective-c method from javascript

ios, javascript, objective-c

Solution

The most usual approach that I used to interact from javascript within obj-c is to changing hash. On required event in your js write `window.location.hash = '#cmd_alertMessage';` after this your `- (BOOL)webView: shouldStartLoadWithRequest: navigationType:` will be called:

   - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSArray * compenents = [request.URL.absoluteString componentsSeparatedByString:@"#"];
    if (compenents.count > 1) {
        NSString * cmd = compenents[1];
        if ([cmd rangeOfString:@"cmd_alertMessage"].location != NSNotFound) {
            // Call your obj-c method and get appropriated param
            NSString * jsFunction = [NSString stringWithFormat:@"setParameterFromAAAMethod('%@')", [self aaa]];
            // Return this param back to js
            NSString * alertMessage = [webView stringByEvaluatingJavaScriptFromString:jsFunction];
        }
    }


    return YES;
}

- (NSString *)aaa
{
    return @"This is special parameter that you need";
}

So, it will work in 3 steps:

- Invoke hash changing to request parameter from obj-c code in js;

- Handle hash changed (parameter request) and return in back to js in obj-c;

- Handle recieved parameter in js again

Problem

I make any webView And I want to call from javascript any objective c method which return any parameter. I tried many ways but not allowed . Objective c method here: ``` - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *URL = [request URL]; if ([[URL scheme] isEqualToString:@"donordialog"]) { // now we need to figure out the function part NSString *functionString = [URL resourceSpecifier]; if ([functionString hasPrefix:@"bloodTypeChanged"]) { // the blood type has changed, now do something about it. NSString *parameter = [functionString stringByReplacingOccurrencesOfString:@"bloodTypeChanged" withString:@""]; // remove the '(' and then the ')' parameter = [parameter stringByReplacingOccurrencesOfString:@"(" withString:@""]; parameter = [parameter stringByReplacingOccurrencesOfString:@")" withString:@""]; // log the paramter, as I don't know what to do with it right now UIAlertView *alert=[[ UIAlertView alloc] initWithTitle:@"iosdan javascripti" message:@"ddddddddd" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; //NSLog(@"%@", parameter); } return NO; } return YES; } ``` javascript: ``` function myFunction() { url="http://example.com"; window.location="donordialog:blooTypeChanged("+url+")"; } ``` html: ``` <button onclick="myFunction()">click me</button> ``` comment: I need that: it is obj c method for example. aaa{} . My aaa method must return any parameter. and I have wevView. I loaded any url to this webView: for example www.example.com/forios . I need call this (aaa) method from javascript which it is in html on www.example.com/forios and alert the result of aaa function. understand?. If understand, dont watch to my code. help please yourself anyway. android version of my question:Call Java function from JavaScript over Android WebView I want to alert some parameter returning from method. Help please. Thanks.

Original source

Related problems