2009-01-31 12 views
8

J'essaie d'obtenir la valeur de retour d'une fonction javascript (par exemple: return "hello") avec iPhone SDK.return value javascript UIWebView

Sous OS X, la méthode WebView -stringByEvaluatingJavaScriptFromString renvoie un NSString contenant la valeur de retour de la fonction js, mais aucune valeur n'est renvoyée sur l'iPhone.

Comment puis-je résoudre ce problème?


J'ai trouvé une méthode UIWebViewDelegate privée

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

lorsque la fonction invoquaient alerte() est utilisée dans le script js. Je peux donc obtenir la valeur "retour" en appelant le alert(myReturValue).

Cela ne résout pas mon problème, car j'ai besoin de quelque chose dans le SDK public.

Répondre

28

La chaîne de retour est le résultat de la dernière instruction Javascript. Ne pas mettre return en face de lui!

Le code minimum qui a fonctionné pour moi:

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]; 

donc je devais ajouter le UIWebView* à une vue (sinon il plantait par la suite), mais n'a pas à charger quoi que ce soit dans le WebView.

Notez que la dernière instruction est juste "f();", donc la chaîne retournée contiendra le résultat de l'évaluation de f().

6

J'ai eu le même problème lorsque j'ai essayé d'appeler certaines fonctions de google maps API.

Un problème est survenu lors du renvoi d'objets, donc je l'ai résolu par la fonction toString().

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

pouvez-vous répondre à cela aussi http://stackoverflow.com/questions/10793698/how-to-make-image-maps-clickable-using-uiwebview-in-iphone –