2009-01-31 22 views
8

Estoy tratando de obtener el valor de retorno de una función de javascript (por ejemplo: return "hello") con el SDK de iPhone.valor de retorno javascript UIWebView

En OS X, el método WebView -stringByEvaluatingJavaScriptFromString devuelve un NSString que contiene el valor de retorno de la función js, pero en el iPhone no se devuelve ningún valor.

¿Cómo puedo solucionar esto?


He encontrado un método UIWebViewDelegate privada

- (void)webView:(id)fp8 runJavaScriptAlertPanelWithMessage:(id)fp12 initiatedByFrame:(id)fp16 

invoca cuando la función de alerta() se utiliza en el script js. De modo que puedo obtener el valor de "devolución" simplemente llamando al alert(myReturValue).

Eso no resuelve mi problema, porque necesito algo en el SDK público.

Respuesta

28

La cadena de retorno es el resultado de la última declaración de Javascript. Do not pon return delante de él!

El código mínimo que trabajó para mí:

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero]; 
[self.view addSubview:webView]; 
NSString *result = [webView stringByEvaluatingJavaScriptFromString: 
        @"function f(){ return \"hello\"; } f();"]; 
NSLog(@"result: '%@'", result); // 'hello' 
[webView release]; 

así que tuve que añadir el UIWebView* a una vista (de lo contrario, se estrellaría después), pero no tiene que cargar nada en la vista web.

Observe que la última instrucción es solo "f();", por lo que la cadena devuelta contendrá el resultado de la evaluación de f().

6

Tuve el mismo problema cuando intenté llamar a algunas funciones de la API de google maps.

Hubo un problema con la devolución de objetos, por lo que lo resolví por la función toString().

NSString *result = [webView stringByEvaluatingJavaScriptFromString: 
       @"map.getBounds().toString();"]; 
+0

puede responder a esto también http://stackoverflow.com/questions/10793698/how-to-make-image-maps-clickable-using-uiwebview-in-iphone –

Cuestiones relacionadas