我有一个HTML表单,其中包含我在UIWebview中打开的某些字段。点击特定按钮后,我想进行应用操作。
我现在使用的方法是点击按钮,我将页面重定向到虚拟URL。我使用委托方法" shouldStartLoadWithRequest"来嗅探URL。并停止重定向。然后,我做我的自定义事件(捕获图像和上传),然后继续。这似乎是一个丑陋的黑客。无论如何,我可以直接挂钩按钮点击事件而不是页面重定向?
更新 在单击按钮时调用JS函数时,似乎无法设置要触发的委托方法。唯一的方法是使用上面提到的URL嗅探方法。下面的joern详细解释了这一点,所以我会接受他的回答。
答案 0 :(得分:57)
您可以执行以下操作:
在您的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中添加了“捕获”,以便您可以区分应该触发不同操作的几个按钮(如果您愿意):
答案 1 :(得分:3)
此代码:
<a class="yourButton" href="inapp://capture">Restart</a>
对我不起作用。
我在我的javascript代码中添加了&#34; inapp:// capture&#34;
KeyboardInputManager.prototype.restart = function (event) {
window.location.href = "inapp://capture";
//other code
};
我也使用UIWebViewDelegate,它适用于iOS 8,9。
答案 2 :(得分:0)
快速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
}