How to call JavaScript Function in objective C How to call JavaScript Function in objective C ios ios

How to call JavaScript Function in objective C


NSString *path;NSBundle *thisBundle = [NSBundle mainBundle];path = [thisBundle pathForResource:@"first" ofType:@"html"];NSURL *instructionsURL = [NSURL fileURLWithPath:path];[webView loadRequest:[NSURLRequest requestWithURL:instructionsURL]]; NSString * jsCallBack = [NSString stringWithFormat:@"myFunction()"]; [webView stringByEvaluatingJavaScriptFromString:jsCallBack];[webView stringByEvaluatingJavaScriptFromString:@"myFunction()"];

If all this code called from single place, than it won't work, because page load is asynchronous and page with JavaScript code is not ready at that moment.Try to call this methods [webView stringByEvaluatingJavaScriptFromString:@"myFunction()"]; in UIWebViewDelegate callback method –webViewDidFinishLoad:


<!DOCTYPE html><html><head>    <script type="text/javascript" charset="utf-8" src="your.js"></script>    <script type="text/javascript" charset="utf-8" src="andYourJsfileName.js"></script>    <script>        function myFunction('yourParameter')         {            // do your javascript operation            //alert("my Hello World!");            return value;        }    </script></head><body>    <!--button onclick="myFunction()">Try it</button--></body>

Add a html file to project folder.Add your javascript file also to project folder.

After adding the html file and this native code to your viewController.m

-(void)loadMyWebView {    webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 200)];    NSString *path;    NSBundle *thisBundle = [NSBundle mainBundle];    path = [thisBundle pathForResource:@"first" ofType:@"html"];    NSURL *instructionsURL = [NSURL fileURLWithPath:path];    NSString* htmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];    webView.delegate=self;    [webView loadHTMLString:htmlString baseURL:instructionsURL];    // [self.view addSubview:webView];  (if you want to access the javascript function and don't want to add webview, you can skip that also.)}- (void)webViewDidFinishLoad:(UIWebView*)theWebView {    NSString* returnValue =[theWebView stringByEvaluatingJavaScriptFromString:@"myFunction('pass your parameter')"];    NSLog(@"returnValue = %@ ",returnValue);}- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{    NSLog(@" didFailLoadWithError");}

Call this in your didLoad method [self loadMyWebView];

Here you can add any javascript file to the project and include it to the html file. You can call javascript function inside the tag. (exactly as you used to call js functions. )

You can pass any parameter to javascript function and return anything to objective function.

Remember ::: After adding all js file don't forget to add them to Copy Bundle Resources

To avoid warning ::: remove them from Compile Sources


One can use JavaScriptCore framework to run JavaScript code from Objective-C.

#import <JavaScriptCore/JavaScriptCore.h>...JSContext *context = [[JSContext alloc] init];[context evaluateScript: @"function greet(name){ return 'Hello, ' + name; }"];JSValue *function = context[@"greet"];JSValue* result = [function callWithArguments:@[@"World"]];[result toString]; // -> Hello, World

Here is a demo:

https://github.com/evgenyneu/ios-javascriptcore-demo