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

Как перехватить кнопку, нажмите внутри UIWebview на IOS?

У меня есть HTML-форма, которая имеет определенные поля, которые я открываю внутри UIWebview. При нажатии одной кнопки я хочу выполнить действие в приложении.

Подход, который я использую сейчас, находится по щелчку кнопки i, перенаправляет страницу на фиктивный URL. Я нюхаю URL, используя метод делегирования "shouldStartLoadWithRequest" и останавливаю перенаправление. Затем я выполняю свое пользовательское событие (снимок и загрузка), а затем продолжаю. Это кажется уродливым взломом. В любом случае, я могу напрямую подключиться к событию нажатия кнопки, а не перенаправлять страницы?

UPDATE Кажется, что нет способа настроить метод делегата для запуска при вызове функции JS при нажатии кнопки. Единственный способ сделать это - использовать вышеописанный метод sniffing URL. Это подробно объяснено ниже, поэтому я приму его ответ.

4b9b3361

Ответ 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.