2015-06-05 59 views
8

當用戶單擊UIWebView中的select框時,屏幕底部會顯示一個本機彈出窗口,其中包含可用選項。網頁內容向上滾動,爲這個彈出窗口騰出空間。在UIWebView中檢測本機選擇小部件何時打開/關閉

似乎當這發生滾動,雖然body.scrollTop值確實發生了改變一樣,沒有DOM事件。有什麼方法可以檢測popover何時打開,還是我們必須使用setInterval來輪詢並觀察scrollTop更改?

+1

是否有可能對iOS應用程序進行修改(例如)評估Web視圖中的JavaScript代碼? – kekub

+1

我們可能能夠在本機端實現某種通知,但理論上我也希望在Safari中也能使用這種通知。 –

回答

3

我很驚訝,滾動事件沒有解僱。 MDN has a list of events可以綁定到那可能對你有幫助。

跳轉到我的一個快速的想法是,你可以綁定到mouseup和輸入/改變事件上的選擇和回調確定什麼scrollTop是用戶與選擇進行交互。如果您需要跟蹤多個選擇,則可以將事件委託給主體以避免創建其他偵聽器。

輪詢的工作,但它會是少了很多有效的,然後添加在選擇自己的幾個事件偵聽器,所以希望你能找到一個合適的事件。

希望有幫助!

+1

綁定到'select'上的'click'事件對於檢測它何時打開是確定的,但是我無法檢測到本地彈出窗口何時關閉,因爲在這種情況下根本沒有與頁面的交互。我使用了投票並觀察'window.innerHeight'。 –

+0

授予賞金,雖然這只是部分答案。我認爲,沒有訴諸輪詢的方式,無法檢測到popover。 –

0

你可以做到這一點是通過設置在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()") 
    } 
} 
相關問題