возвращаемое значение JavaScript UIWebView - PullRequest
9 голосов
/ 31 января 2009

Я пытаюсь получить возвращаемое значение функции JavaScript (например: return "hello") с помощью iPhone SDK.

В OS X метод WebView -stringByEvaluatingJavaScriptFromString возвращает строку NSString, содержащую возвращаемое значение функции js, но на iPhone значение не возвращается.

Как мне это решить?


Я нашел частный метод UIWebViewDelegate

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

вызывается при использовании функции alert () в сценарии js. Таким образом, я могу получить возвращаемое значение, просто позвонив alert(myReturValue).

Это не решает мою проблему, потому что мне нужно что-то в общедоступном SDK.

Ответы [ 2 ]

29 голосов
/ 03 февраля 2009

Возвращаемая строка является результатом последнего оператора 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* к представлению (в противном случае оно могло бы рухнуть после этого), но не нужно было ничего загружать в веб-представление.

Обратите внимание, что последний оператор просто "f();", поэтому возвращаемая строка будет содержать результат вычисления f().

6 голосов
/ 24 июня 2010

У меня была такая же проблема, когда я пытался вызвать некоторые функции из API карт Google.

Возникла проблема с возвратом объектов, поэтому я решил ее с помощью функции toString ().

NSString *result = [webView stringByEvaluatingJavaScriptFromString:
                @"map.getBounds().toString();"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...