Javascript в обратном вызове UIWebView для C / Objective-C - PullRequest
35 голосов
/ 20 мая 2010

Есть ли способ получить обратный вызов для target-c, когда определенное событие было обнаружено в UIWebView? Может ли Javascript отправить обратный вызов в Objective-C?

Ответы [ 2 ]

31 голосов
/ 08 июля 2011

Просто чтобы проиллюстрировать решение с помощью "bpapa" с реальным кодом:

ВНИМАНИЕ: непроверенный код

Реализуйте этот метод в делегате UIWebView ...

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if ( [[[inRequest URL] scheme] isEqualToString:@"callback"] ) {

        // Do something interesting...

        return NO;
    }

    return YES;
}

... затем поместите ссылку в webwieb следующим образом:

<a href="callback:whatever">Click me</a>

И это должно активировать ваш код обратного вызова. Очевидно, вы можете вызвать его с помощью JavaScript вместо простой ссылки.

31 голосов
/ 20 мая 2010

Обновление - больше не используйте UIWebView. Используйте WKWebView или, еще лучше (если он соответствует вашим потребностям, и вы создаете для iOS 9), контроллер Safari View.

Но если вы должны использовать UIWebView, в своем делегате UIWebView предоставьте реализацию для webView: shouldStartLoadWithRequest: navigationType:

В файлах HTML или Javascript добавьте функции, которые отправляют URL-адреса в пользовательскую схему (для удобства чтения пользовательская схема не требуется). Все отправленные URL-адреса будут переданы реализации метода Objective-C, и тогда вы сможете делать то, что хотите.

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