检测UIWebView中何时打开/关闭本机选择窗口小部件

时间:2015-06-05 16:15:34

标签: javascript ios scroll uiwebview

当用户点击select中的UIWebView框时,屏幕底部会显示包含可用选项的原生弹出窗口。网页内容向上滚动以为此弹出窗口腾出空间。

虽然body.scrollTop的值确实发生了变化,但在此滚动发生时似乎没有触发DOM事件。有没有办法检测弹出窗口何时打开,或者我们是否必须使用setInterval进行轮询并观察scrollTop更改?

2 个答案:

答案 0 :(得分:3)

我很惊讶滚动事件没有被解雇。 MDN has a list of events可能对你有所帮助。

跳出来的一个简单的想法是你可以绑定到mouseup并在select上输入/更改事件,并且在他们的回调中确定当用户与select交互时scrollTop是什么。如果您需要跟踪多个选择,则可以将事件委托给正文以避免创建其他侦听器。

轮询可行,但在选择本身上添加一些事件监听器效率要低得多,所以希望你能找到一个有效的事件。

希望有所帮助!

答案 1 :(得分:0)

您可以通过使用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()")
    }
}