如何在IOS上拦截UIWebview内的Button点击?

IT技术 javascript iphone ios uiwebview onclick
2021-02-28 13:38:08

我有一个 HTML 表单,其中包含我在 UIWebview 中打开的某些字段。单击特定按钮后,我想执行应用内操作。

我现在使用的方法是单击按钮将页面重定向到一个虚拟 URL。我使用委托方法“shouldStartLoadWithRequest”嗅探 URL 并停止重定向。然后我做我的自定义事件(捕获图像和上传),然后继续。这似乎是一个丑陋的黑客。无论如何,我可以直接挂钩按钮单击事件而不是页面重定向?

更新 当单击按钮时调用 JS 函数时,似乎无法设置委托方法来触发。唯一的方法是使用上面提到的 URL 嗅探方法。joern在下面详细解释了这一点,所以我会接受他的回答。

3个回答

您可以执行以下操作:

在你的 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 中添加了“捕获”,以便您可以区分应该触发不同操作的几个按钮(如果您愿意):

@JoeBlow 没问题;-) 您可以如上所述拦截对“提交”按钮的点击,然后用对// do capture action提交表单的 HTML 中的 javascript 函数的调用替换评论。
2021-04-24 13:38:08
是的,这是我已经在使用的方法。无论如何要通过代码向按钮添加操作?由于我认为是沙箱,这可能是不可能的,但只是想确定一下。
2021-04-28 13:38:08
哦,是的,等等。在上面的示例中,只需返回YES而不是NO在您捕获操作之后。然后表单会正常提交,就好像什么都没发生一样。无需调用 javascript 函数。
2021-05-07 13:38:08
我的意思是如何向按钮单击添加函数(方法),以便按钮单击的回调转到此函数。是否可以?或者 URL 拦截是唯一的方法吗?
2021-05-12 13:38:08
你能澄清一下你所说的“行动”是什么意思吗?
2021-05-16 13:38:08

这段代码:

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

对我不起作用。

在我的 javascript 代码中为事件函数添加了“inapp://capture”

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

我也使用 UIWebViewDelegate 并且它适用于 iOS 8、9。

对于快速 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
}