如何在IOS里面拦截按钮UIWebView的点击?如何在IOS里面拦截按钮UIWebView的点击?

2019-05-17 15:59发布

我有了,我正在一个UIWebView中打开某些领域的HTML表单。 上的特定按钮的点击,我想在应用程序的行动做了。

我现在使用的方法是在按钮i的页面重定向到一个假网址的点击。 我使用的委托方法“shouldStartLoadWithRequest”嗅URL和停止重定向。 然后我做我的自定义事件(捕获图像和上传),然后继续。 这似乎是一个丑陋的黑客。 反正我可以直接挂接到按钮单击事件,而不是一个页面重定向?

UPDATE似乎有没有办法建立一个委托方法火灾时,JS函数调用上按一下按钮。 要做到这一点的唯一方法是使用上面提到的网址嗅探方法。 这在详细joern下面进行了解释,所以我会接受他的答案。

Answer 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;
}

我补充说:“捕捉”到您的按钮的网址,这样你可以几个按钮区分应触发不同的动作(如果你想):



Answer 2:

此代码:

<a class="yourButton" href="inapp://capture">Restart</a>

不为我工作。

我已经添加了“应用程式内://捕获”在我的JavaScript代码的事件函数

KeyboardInputManager.prototype.restart = function (event) {
  window.location.href = "inapp://capture";
  //other code
};

此外,我使用UIWebViewDelegate和它适用于iOS的8,9。



Answer 3:

对于SWIFT 4.2

在HTML侧按钮的代码:

<a class="catch-iOS" href="inapp://home">Продолжить покупки</a>

UIWebViewDelegate方法:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool {
    if request.url?.scheme == "inapp" {
        if request.url?.host == "home" {
            // do something
        }
    }
    return true
}


文章来源: how to intercept Button click inside UIWebview on IOS?