Подтвердить что ты не робот

Javascript в обратном вызове UIWebView для C/Objective-C

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Просто, чтобы проиллюстрировать решение с помощью "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 вместо простой ссылки.