Cómo llamar a la function Native Iphone / Android desde Javascript?

Estoy usando Web View tanto en Iphone como en Android. En Android, uso crear una variable para llamar a funciones / methods nativos de Andriod. Pero no he podido encontrar algo similar en Iphone. Entonces, cómo llamar a una function nativa de Iphone desde JavaScript.

iOS

En iOS, puedes usar un esquema de url personalizado implementando shouldStartLoadWithRequest . Si quisiera, por ejemplo, querer cambiar el color del tinte de la barra de herramientas:

ViewController.h

 @property (strong, nonatomic) IBOutlet UIToolbar *toolbar; 

ViewController.m

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = request.URL; NSString *scheme = [url scheme]; if ([scheme isEqualToString:@"color"]) { self.toolbar.tintColor = [self colorWithHexString:url.host]; } return YES; } 

Javascript

En javascript simplemente cambia window.location , que lanzará un fuego y olvidará :

 window.location = 'color://' + color; 

Simplemente encadena tus parameters como:

 window.location = 'myscheme://param1/' + value1 + '/param2/' + value2; 

Solo asegúrese de usar encodeURIComponent para codificar sus parameters (para crear una url válida).

Más información

Androide

En Android, agregas una interfaz de JavaScript:

  WebView webView = getWebView(); webView.loadUrl("http://localhost:8080"); // must be after loadUrl on lower apis webView.addJavascriptInterface(new AndroidBridge(this), "AndroidBridge"); 

 public class AndroidBridge { private MainActivity activity; public AndroidBridge(MainActivity activity) { this.activity = activity; } public void changeNavbarBackground(String color) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException { Log.i(getClass().getSimpleName(), "changeNavbarBackground " + color); Field f = R.color.class.getField(color); final int col = (Integer) f.get(null); activity.changeNavbarBackground(col); } } 

Javascript

En javascript usa la interfaz de JavaScript:

 if (window.AndroidBridge) { window.AndroidBridge.changeNavbarBackground(color); }