使用UITextView时有相应的资源。如何注册Done
按键按下事件?当用户将表单集中在webview中时,键盘会显示。
答案 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
中的是按钮的“名称”的属性