键盘"完成" UIWebView和WKWebView的按钮按下事件

时间:2015-09-13 21:53:13

标签: ios uiwebview wkwebview

使用UITextView时有相应的资源。如何注册Done按键按下事件?当用户将表单集中在webview中时,键盘会显示。

3 个答案:

答案 0 :(得分:6)

主要思想是使用Javascript注入来实现您想要的效果。 您可以尝试捕获名为onfocusout的DOM事件(有关详细信息,请参阅http://www.w3schools.com/jsref/event_onfocusout.asp)。

以下是如何为UIWebView执行此操作的示例。 WKWebView可以用类似的方式处理。

在第一次加载webview后,调用此方法注入一些Javascript代码

[webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('youTextFieldID').addEventListener('onfocusout', function () {"
                                                @"var frame = document.createElement('iframe');"
                                                @"frame.src = 'doneEditing://';"
                                                @"document.body.appendChild(frame);"
                                                @"setTimeout(function () { document.body.removeChild(frame); }, 0);"
                                                @"}, false);"];

像这样编写你的UIWebView委托方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        if ([request.URL.scheme isEqualToString:@"doneEditing"]) {
            // Call you event handler here
            [self doneButtonTouchEventHandler]
            return NO;
        }
        return YES;
}
祝你好运

答案 1 :(得分:2)

关键是在网页加载时添加事件监听器。我假设您想知道文本字段的blur事件。

以下是一个基本的工作示例:

<html>
<head>
<script>

    function initPage() {
        document.addEventListener('focusin', handleFocusIn);
        document.addEventListener('focusout', handleFocusOut);
    }

    function handleFocusIn(e) {
        alert('In');
    }

    function handleFocusOut(e) {
        alert('Out');
    }

</script>
</head>

<body onload="initPage()">

<form>
    <input type="text" name="username">
</form>

</body>
</html>

我希望有所帮助,请让我知道!

祝你好运!

答案 2 :(得分:0)

@小鸭 答案是针对UIWebView

这是WkWebview的解决方案

将ViewController扩展为WKNavigationDelegate

 webView.navigationDelegate = self

实现和替代功能 获取您的按钮ID并写在document.getElementById 在页面加载完成时调用此方法

func webView(_ webView: WKWebView,didFinish navigation: WKNavigation!) {
    print("loaded")

                let doneJS = """
    document.getElementById('m_ara_input').addEventListener('focusout', function () {
    var frame = document.createElement('iframe');
    frame.src = 'doneEditing://';
    document.body.appendChild(frame);
    setTimeout(function () { document.body.removeChild(frame); }, 0);
    }, false);
    """

                webView.evaluateJavaScript(doneJS, completionHandler: nil)


}

在方法下方覆盖

   func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

        guard let url = navigationAction.request.url else {return}


        if (url.scheme == "doneediting") {

             executeSubmit()

         }


        decisionHandler(.allow)
    }

编写此功能

    func executeSubmit(){

        let js = """
var a = document.getElementsByClassName("btn btn-default pull-left");
a.ara_buton.click();
"""
        webView.evaluateJavaScript(js, completionHandler: nil)

    }
javascript ara_buton中的

是按钮的“名称”的属性