我有了,我正在一个UIWebView中打开某些领域的HTML表单。 上的特定按钮的点击,我想在应用程序的行动做了。
我现在使用的方法是在按钮i的页面重定向到一个假网址的点击。 我使用的委托方法“shouldStartLoadWithRequest”嗅URL和停止重定向。 然后我做我的自定义事件(捕获图像和上传),然后继续。 这似乎是一个丑陋的黑客。 反正我可以直接挂接到按钮单击事件,而不是一个页面重定向?
UPDATE似乎有没有办法建立一个委托方法火灾时,JS函数调用上按一下按钮。 要做到这一点的唯一方法是使用上面提到的网址嗅探方法。 这在详细joern下面进行了解释,所以我会接受他的答案。
你可以做到以下几点:
在你的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;
}
我补充说:“捕捉”到您的按钮的网址,这样你可以几个按钮区分应触发不同的动作(如果你想):
此代码:
<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。
对于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
}