How to call Objective-C from Javascript?
cocoa-touch, iphone, uiwebview
Solution
The standard workaround for `UIWebView` is to set a `UIWebViewDelegate`, and implement the method `webView:shouldStartLoadWithRequest:navigationType:`. In your JavaScript code, navigate to some fake URL that encodes the information you want to pass to your app, like, say:
window.location = "fake://myApp/something_happened:param1:param2:param3";
In your delegate method, look for these fake URLs, extract the information you need, take whatever action is appropriate, and return `NO` to cancel the navigation. It's probably best if you defer any lengthy processing using some flavor of `performSelector`.
Problem
I have a WebView, and I want to call a view in Objective-C from JavaScript. Does someone know how I can do this? I have this code in my ViewController: ``` - (BOOL)webView:(UIWebView *)webView2 shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSString *requestString = [[request URL] absoluteString]; NSArray *components = [requestString componentsSeparatedByString:@":"]; if ([components count] > 1 && [(NSString *)[components objectAtIndex:0] isEqualToString:@"myapp"]) { if([(NSString *)[components objectAtIndex:1] isEqualToString:@"myfunction"]) { NSLog([components objectAtIndex:2]); [[Airship shared] displayStoreFront]; //<- This is the code to open the Store NSLog([components objectAtIndex:3]); // param2 // Call your method in Objective-C method using the above... } return NO; } return YES; // Return YES to make sure regular navigation works as expected. } ``` And in Javascript: ``` function store(event) { document.location = "myapp:" + "myfunction:" + param1 + ":" + param2; } ``` But nothing happens.