当用户点击select
中的UIWebView
框时,屏幕底部会显示包含可用选项的原生弹出窗口。网页内容向上滚动以为此弹出窗口腾出空间。
虽然body.scrollTop
的值确实发生了变化,但在此滚动发生时似乎没有触发DOM事件。有没有办法检测弹出窗口何时打开,或者我们是否必须使用setInterval
进行轮询并观察scrollTop
更改?
答案 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()")
}
}