2009-01-31 72 views
8

我試圖用iPhone SDK獲取JavaScript函數的返回值(例如:return "hello")。返回值javascript UIWebView

在OS X -stringByEvaluatingJavaScriptFromString返回包含js函數返回值的NSString,但在iPhone上沒有返回值的WebView方法。

我該如何解決這個問題?


我發現了一個私人UIWebViewDelegate方法

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

當警報()函數在JS腳本用於調用。所以我可以通過調用alert(myReturValue)來獲得「返回」值。

那不解決我的問題,因爲我需要在公共SDK的東西。

回答

28

返回字符串是最後一個JavaScript語句的結果。難道return在前面!

爲我工作的最低代碼:

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

所以我不得不把UIWebView*添加到視圖(否則會崩潰之後),但沒有任何東西加載到web視圖。

請注意,最後一條語句只是「f();」,所以返回的字符串將包含f()的評估結果。

6

我有同樣的問題,當我試圖調用從谷歌地圖API的一些功能。

返回的對象有問題,所以我通過函數toString()解決了它。

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

你能回答嗎?http://stackoverflow.com/questions/10793698/how-to-make-image-maps-clickable-using-uiwebview-in-iphone – 2012-06-27 14:08:52