在 UIWebView 中检测本机 select 小部件何时为 opened/closed

Detecting when native select widget is opened/closed in UIWebView

当用户单击 UIWebView 中的 select 框时,本机弹出窗口将显示在屏幕底部,其中包含可用选项。网页内容向上滚动以为弹出窗口腾出空间。

虽然 body.scrollTop 的值确实发生了变化,但似乎在发生此滚动时没有触发 DOM 事件。有什么方法可以检测弹出窗口何时打开,还是我们必须使用 setInterval 来轮询并观察 scrollTop 的变化?

我很惊讶滚动事件没有触发。 MDN has a list of events可以绑定的那个可能对你有帮助

我突然想到,您可以绑定到 select 上的 mouseup 和 input/change 事件,并在它们的回调中确定当用户与select。如果您有多个 select 需要跟踪,您可以将事件委托给正文以避免创建额外的侦听器。

轮询会起作用,但与在 select 本身上添加一些事件侦听器相比,它的效率要低得多,所以希望您能找到一个有效的事件。

希望对您有所帮助!

您可以通过使用 WebView 委托在 UIPicker 上设置侦听器来实现此目的。然后这个侦听器可以在您的 JS 中调用适当的函数:

class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var webView: UIWebView!

    ...

    // UIWebViewDelegate protocol for WebView load
    func webViewDidFinishLoad(webView: UIWebView!) {
        // Set observer for keyboard load event
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)
    }

    func keyboardWillShow(sender: NSNotification){
        // Call JavaScript function in the WebView
        webView.stringByEvaluatingJavaScriptFromString("yourJSFunction()")
    }
}