Llamar al método objective-c de javascript

Hago cualquier webView y quiero llamar desde javascript cualquier método objective c que devuelva cualquier parámetro. Intenté muchas maneras pero no permití Método del objective c aquí:

- (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> 

comentario: necesito eso: es el método obj c, por ejemplo. aaa {}. Mi método aaa debe devolver cualquier parámetro. y tengo wevView. Cargué cualquier URL a esta webView: por ejemplo, www.example.com/foros. Necesito llamar a este método (aaa) desde javascript que está en html en www.example.com/forios y alertar el resultado de la function aaa. ¿entender?. Si entiendes, no mires a mi código. ayuda a ti mismo de todos modos. Versión de Android de mi pregunta: Llamar a la function Java desde JavaScript en Android WebView Quiero alertar a algunos parameters que regresan del método. Ayuda por favor. Gracias.

El enfoque más habitual que solía interactuar desde javascript dentro de obj-c es cambiar el hash. En el evento requerido en su js, escriba window.location.hash = '#cmd_alertMessage'; después de esto tu - (BOOL)webView: shouldStartLoadWithRequest: navigationType: se llamará:

  - (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"; } 

Entonces, funcionará en 3 pasos:

  1. Invoke hash changing para solicitar el parámetro del código obj-c en js ;
  2. Maneje hash cambiado (request de parámetro) y regrese a js en obj-c ;
  3. Manejar el parámetro recibido en js nuevamente

Aquí hay una solución rápida y fácil sin JavaScriptCore para compatibilidad con versiones anteriores (podría considerar actualizar a Javascriptcore). Aquí hay una implementación fácil.

Nota: esta solución es solo para UIwebview (no UIscrollview)

//viewcontroller.h

 @interface ViewController : UIViewController<UIWebViewDelegate> @property (strong, nonatomic) IBOutlet UIWebView *viewWeb; @end 

//viewcontroller.m

 - (void)viewDidLoad { [super viewDidLoad]; NSString *fullURL = @"http:player.fusion.fm"; NSURL *url = [NSURL URLWithString:fullURL]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; [_viewWeb loadRequest:requestObj]; _viewWeb.delegate = self; } -(BOOL)webView:(UIWebView *)_viewWeb shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = request.URL; if ([[url scheme] isEqualToString:@"ios"]) { [self mute]; // <-- YOUR OBJ-C FUNCTION HERE NSLog(@"test"); return YES; }else { return YES; } } 

// El Javascript (dentro de la vista web)

 try { window.location="ios://null" } catch(err) { } 

Fuente: http://adoptioncurve.net/archives/2012/09/calling-objective-c-methods-from-javascript-in-a-uiwebview/

Puede establecer la location de un iframe oculto en algo específico de su aplicación, y luego interceptar esa request en Obj-C.

Aquí hay una descripción general y algunos ejemplos: http://blog.techno-barje.fr//post/2010/10/06/UIWebView-secrets-part3-Cómo-properly-call-ObjectiveC-from-Javascript/

Bueno, no estoy seguro de si conseguí tu pregunta correcta o no, pero si quieres llamar a cualquier método javascript, puedes hacerlo de esta manera:

[yourWebView stringByEvaluatingJavaScriptFromString:@"yourMethodName()"];

También puede pasar parameters en el método anterior.