當用戶單擊UIWebView
中的select
框時,屏幕底部會顯示一個本機彈出窗口,其中包含可用選項。網頁內容向上滾動,爲這個彈出窗口騰出空間。在UIWebView中檢測本機選擇小部件何時打開/關閉
似乎當這發生滾動,雖然body.scrollTop
值確實發生了改變一樣,沒有DOM事件。有什麼方法可以檢測popover何時打開,還是我們必須使用setInterval
來輪詢並觀察scrollTop
更改?
當用戶單擊UIWebView
中的select
框時,屏幕底部會顯示一個本機彈出窗口,其中包含可用選項。網頁內容向上滾動,爲這個彈出窗口騰出空間。在UIWebView中檢測本機選擇小部件何時打開/關閉
似乎當這發生滾動,雖然body.scrollTop
值確實發生了改變一樣,沒有DOM事件。有什麼方法可以檢測popover何時打開,還是我們必須使用setInterval
來輪詢並觀察scrollTop
更改?
我很驚訝,滾動事件沒有解僱。 MDN has a list of events可以綁定到那可能對你有幫助。
跳轉到我的一個快速的想法是,你可以綁定到mouseup和輸入/改變事件上的選擇和回調確定什麼scrollTop是用戶與選擇進行交互。如果您需要跟蹤多個選擇,則可以將事件委託給主體以避免創建其他偵聽器。
輪詢的工作,但它會是少了很多有效的,然後添加在選擇自己的幾個事件偵聽器,所以希望你能找到一個合適的事件。
希望有幫助!
綁定到'select'上的'click'事件對於檢測它何時打開是確定的,但是我無法檢測到本地彈出窗口何時關閉,因爲在這種情況下根本沒有與頁面的交互。我使用了投票並觀察'window.innerHeight'。 –
授予賞金,雖然這只是部分答案。我認爲,沒有訴諸輪詢的方式,無法檢測到popover。 –
你可以做到這一點是通過設置在UIPicker一個聽者用的WebView委託。這位聽衆可以在你的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()")
}
}
是否有可能對iOS應用程序進行修改(例如)評估Web視圖中的JavaScript代碼? – kekub
我們可能能夠在本機端實現某種通知,但理論上我也希望在Safari中也能使用這種通知。 –