How can I get a UIWebView to focus on a form input

2020-02-05 04:58发布

问题:

I've created a UIWebView for logging into Facebook's Graph API OAuth interface. This works great, but I have to tap the first input field in order for the keyboard to pop up. Ideally, the keyboard would appear as soon as the form appears. So I've been trying to figure out how to make the first form field get the focus from the webViewDidFinishLoad: UIWebViewDelegate method, like so:

- (void)webViewDidFinishLoad:(UIWebView *)wv {
    [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByName('email')[0].focus();"];
}

Alas, this does not work. Curiously, when I run that JavaScript in the Firefox JavaScript console, it does move the focus to the email field. When I run it in Safari for the Mac, however, it does nothing, just like on iOS. FWIW, alert(document.getElementsByName('email')[0]) does show that it selects an HTMLInputElement. So why does focus() do nothing either in iOS or Mac OS X?

回答1:

This is now possible with iOS 6.

UIWebView* webView = <#your webView here#>;
[webView setKeyboardDisplayRequiresUserAction:NO];
[webView loadHTMLString:@"<html><head></head><body><form><input id=\"textField\" /></form><script>document.getElementById(\"textField\").focus();</script></body></html>"
                baseURL:nil];


回答2:

As soumya92 points out in the comment to the original post, this post finds that it's not possible at this time. Alas.