Как перехватить кнопку, нажмите внутри UIWebview на IOS?
У меня есть HTML-форма, которая имеет определенные поля, которые я открываю внутри UIWebview. При нажатии одной кнопки я хочу выполнить действие в приложении.
Подход, который я использую сейчас, находится по щелчку кнопки i, перенаправляет страницу на фиктивный URL. Я нюхаю URL, используя метод делегирования "shouldStartLoadWithRequest" и останавливаю перенаправление. Затем я выполняю свое пользовательское событие (снимок и загрузка), а затем продолжаю. Это кажется уродливым взломом. В любом случае, я могу напрямую подключиться к событию нажатия кнопки, а не перенаправлять страницы?
UPDATE
Кажется, что нет способа настроить метод делегата для запуска при вызове функции JS при нажатии кнопки. Единственный способ сделать это - использовать вышеописанный метод sniffing URL. Это подробно объяснено ниже, поэтому я приму его ответ.
Ответы
Ответ 1
Вы можете сделать следующее:
В вашем HTML
<a class="yourButton" href="inapp://capture">Button Text</a>
В UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([request.URL.scheme isEqualToString:@"inapp"]) {
if ([request.URL.host isEqualToString:@"capture"]) {
// do capture action
}
return NO;
}
return YES;
}
Я добавил "захват" на ваш URL-адрес кнопки, чтобы вы могли различать несколько кнопок, которые должны запускать разные действия (если вы хотите):
Ответ 2
Этот код:
<a class="yourButton" href="inapp://capture">Restart</a>
не работает для меня.
Я добавил "inapp://capture" в свой код javascript для функции события
KeyboardInputManager.prototype.restart = function (event) {
window.location.href = "inapp://capture";
//other code
};
Также я использую UIWebViewDelegate, и он работает для iOS 8, 9.