2009-01-31 16 views
8

Ich versuche, den Rückgabewert einer Javascript-Funktion (zum Beispiel: return "hello") mit iPhone SDK zu erhalten.Rückgabewert Javascript UIWebView

Unter OS X gibt die WebView-Methode -stringByEvaluatingJavaScriptFromString einen NSString zurück, der den Rückgabewert der Funktion js enthält, aber auf dem iPhone wird kein Wert zurückgegeben.

Wie kann ich das lösen?


fand ich eine private UIWebViewDelegate Methode

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

aufgerufen, wenn die alert() Funktion in der js Skript verwendet wird. So kann ich den "Rückgabewert" nur durch den Aufruf alert(myReturValue) erhalten.

Das löst mein Problem nicht, weil ich etwas im öffentlichen SDK brauche.

Antwort

28

Die Rückgabezeichenfolge ist das Ergebnis der letzten JavaScript-Anweisung. Do nicht setzen return davor!

Der Mindest Code, der für mich gearbeitet:

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 hatte ich die UIWebView* zu einer Ansicht hinzufügen (sonst wäre es zum Absturz danach), hatte aber nichts in die Webansicht zu laden.

Beachten Sie, dass die letzte Anweisung nur "f();" lautet, daher enthält die zurückgegebene Zeichenfolge das Ergebnis der Auswertung f().

6

Ich hatte das gleiche Problem, wenn ich versuchte, einige Funktionen von Google Maps API aufzurufen.

Es gab ein Problem mit der Rückgabe von Objekten, also löste ich es mit der Funktion toString().

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

können Sie diese beantworten http://stackoverflow.com/questions/10793698/how-to-make-image-maps-clickable-using-uiwebview-in-iphone –