views:

1380

answers:

3

Hi, i'm trying to get the return value of a javascript function(for example:return "hello") with iPhone SDK. On OS X the WebView method -stringByEvaluatingJavaScriptFromString: return a NSString containing the js function return value, but on the iPhone no value is returned.

How can i solve?

Thanks Marco

A: 

I found a private UIWebViewDelegate method

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

invoked when the alert() function is used in the js script. So i can get the "return" value just by call alert(myReturValue).

That doesn't solve my problem, because i need something in the public SDK.

Marco

Marco
+4  A: 

The return string is the result of the last Javascript statement. Do not put return in front of it!

The minimum code that worked for me:

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

So I had to add the UIWebView* to a view (otherwise it would crash afterwards), but didn't have to load anything into the webview.

Notice that the last statement is just "f();", so the returned string will contain the result of the evaluation of f().

squelart
A: 

I had the same problem when I tried call some functions from google maps API.

There was a problem with returning objects, so I solved it by function toString().

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