2011-11-29 7 views

Respuesta

10

Puede ejecutar JavaScript en su UIWebView desde Obj-C. Simplemente llame al [webView stringByEvaluatingJavaScriptFromString:@"myJavaScript"];.

pude imaginar una configuración como esta:

página web

<html> 
    <head> 
     <script type="text/javascript"> 
     function callmeFromObjC(para1) { 
      // do something 
      alert(para1); 
     } 
     </script> 
    </head> 
    <body> 
    </body> 
</html> 

Objective-C

NSString *myParameter = @"myParameter"; 
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"callmeFromObjC('%@')", myParameter]]; 
+0

gracias, funciona. ¿Hay alguna manera que permita llamar a la función de iOS desde javascript? – jAckOdE

+1

¿Has leído mi respuesta? Sé que no tiene código de muestra, pero tiene la respuesta a la pregunta en su comentario. –

+3

Implemente un esquema de URL personalizado como sugirió Johan Kool y luego llame a su URL de JS "myapp: // parameter1/parameter2/parameter3" para hacer que esto funcione también necesita implementar el método "- (BOOL) application: (UIApplication *) application handleOpenURL: (NSURL *) url "en su delegado de la aplicación. Aquí hay un tutorial completo sobre eso: http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html –

1

Que el javascript cargar una URL personalizada, que intercepta sus aplicaciones. Puede analizarlo, preparar los datos y pasarlo a su página web a través del stringByEvaluatingJavaScriptFromString:.

+0

hola, aquí es cómo implementé: – jAckOdE

+0

tengo una función jsfunc() {location.href = "url personalizada"}, uso webView: shouldStartLoadWithRequest: navigationType para manejar la url y llamar a una función nativa. El problema es que la función nativa devuelve una cadena, y jsfunc() debería devuelve esa cadena. ¿Cómo hacerlo? Hice una solución llamando a otra función js desde el código nativo usando stringByEvaluatingJavaScriptFromString y le pasé la cadena de retorno, pero sería mejor si jsfunc() puede devolverla directamente. – jAckOdE

1
[webView loadHTMLString:@"<script src=\"filename.js\"></script>" 
     baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]]; 

NSString *result = [webView stringByEvaluatingJavaScriptFromString:@"function(parameter)"]; 

sus comentarios para iOS

window.location = customprefix://function/parameter=value 

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([[URL scheme] isEqualToString:@"customprefix"]) { 
     // handle function name and paramters 
    } 
} 

También escribí una guía sobre cómo llamar y manejar diferentes funciones de JavaScript desde iOS. http://www.dplusmpage.com/2012/07/20/execute-javascript-on-ios/

7

Con WebViewJavaScriptBridge puede lograr una comunicación bidireccional entre javaScript e iOS.

Consulte este enlace a continuación para WebViewJavaScriptBridge.

Utilicé este puente para una de las aplicaciones de comunicación entre iOS y JS y viceversa.

https://github.com/marcuswestin/WebViewJavascriptBridge.

4

Creé una biblioteca iOS/JS para facilitar esto, es decir, la comunicación en ambas direcciones usando métodos similares. Puede verificarlo aquí: https://github.com/tcoulter/jockeyjs

Cuestiones relacionadas