Предложения о том, как связаться с JS, работающим в UIWebView, с приложением obj-c хостинга? - PullRequest
6 голосов
/ 06 апреля 2011

Я планирую иметь приложение-оболочку для iphone с uiwebview, при этом основная часть моего приложения будет работать через javascript в uiwebview.

Теперь я знаю, что легко общаться из среды obj-c со средой javascript с помощью stringByEvaluatingJavaScriptFromString, однако есть ли рекомендуемый способ связи из среды javascript с миром obj-c?

Спасибо

Ответы [ 4 ]

12 голосов
/ 06 апреля 2011

Я всегда использую подход, при котором приложение «переходит» на специальный URL:

window.location = "myapp://somemessage/someargument";

И где приложение ловит это в следующей функции:

-(BOOL)webView:(UIWebView *)webView
                shouldStartLoadWithRequest:(NSURLRequest *)request
                navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    if ( [[url scheme] isEqualToString:@"myapp"] )
    {
        [self handleJSEvent:url];
        return NO;
    }
    return YES;
}

Кроме того, в зависимости от того, что вам нужно, вы можете использовать какую-то очередь событий, которую вы выбираете, используя JSON.stringify(events), в ответ на сообщение, отправленное в приложение, используя метод, описанный выше. Для связи из приложения в JS JSON также очень подходит.

Если есть стандартный или стандартный способ сделать это, я явно пропустил это.

2 голосов
/ 05 марта 2013

Я только что создал библиотеку, которая облегчит вам это общение, используя метод, описанный mvds и Ondrej. Включает двустороннюю связь, стиль событий jQuery, с дополнительными полезными нагрузками JSON с несколькими слушателями. Проверьте это: https://github.com/tcoulter/jockeyjs

2 голосов
/ 13 ноября 2012

Существует очень хороший метод для вызова javascript внутри UIWebView:

[webView stringByEvaluatingJavaScriptFromString:@"yourJSFunction('some_data');"];

обратные вызовы лучше всего делать, как упомянуто MVDS через URL:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
1 голос
/ 06 апреля 2011

Может быть, изменив хеш URL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...