如何拦截button单击iOS内的UIWebview?

我有一个HTML表单,具有某些我在UIWebview中打开的字段。 点击一个特定的button,我想要做一个应用程序的行动。

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

更新似乎没有办法设置委托方法来触发JSbutton单击时调用的函数。 唯一的方法是使用上面提到的URL嗅探方法。 john下面已经详细解释了,所以我会接受他的回答。

您可以执行以下操作:

在你的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; } 

我添加了“捕捉”到你的button的URL,以便你可以区分几个button,应该触发不同的行动(如果你想):

此代码:

 <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。