2015-06-05 11 views
8

Quando l'utente fa clic su una casella select in UIWebView, nella parte inferiore dello schermo viene visualizzato un popover nativo con le opzioni disponibili. I contenuti della pagina vengono visualizzati per far spazio a questo popover.Rilevamento quando il widget di selezione nativo viene aperto/chiuso in UIWebView

Sembra che nessun evento DOM venga generato quando si verifica questo scorrimento, sebbene il valore di body.scrollTop non cambi. C'è un modo per rilevare quando il popover è aperto, o dobbiamo usare setInterval per sondare e guardare per scrollTop cambiare?

+1

È possibile apportare modifiche all'applicazione iOS (ad es. Valutare un codice JavaScript all'interno della visualizzazione Web? – kekub

+1

Potremmo essere in grado di implementare una sorta di notifiche sul lato nativo, ma in teoria mi piacerebbe che funzionasse anche in Safari. –

risposta

3

Sono sorpreso che l'evento di scorrimento non stia sparando. MDN has a list of events che può essere associato a quello potrebbe essere di aiuto a voi.

Una rapida idea che mi viene in mente è che è possibile legarsi al mouse e immettere/modificare gli eventi sulla selezione e nei loro callback determinare quale sia il parametro scrollTop in cui l'utente interagisce con la selezione. Se si dispone di più selezioni da tenere traccia, è possibile delegare gli eventi al corpo per evitare di creare listener aggiuntivi.

Polling funzionerebbe, ma sarebbe molto meno efficiente quindi aggiungendo alcuni listener di eventi sulla selezione stessa, quindi si spera che tu possa trovare un evento che funzioni.

Spero che questo aiuti!

+1

Il collegamento all'evento 'click' su' select' è OK per rilevare quando si apre, ma non c'è modo che io possa vedere per rilevare quando il popover nativo si chiude poiché non vi è alcuna interazione con la pagina in quel caso. Ho fatto ricorso al polling e osservando 'window.innerHeight'. –

+0

Concessione della taglia sebbene questa sia solo una risposta parziale. Capisco che non c'è modo di rilevare la chiusura del popover senza ricorrere al polling. –

0

È possibile ottenere questo risultato impostando un listener su UIPicker con un delegato WebView. Questo ascoltatore può quindi chiamare una funzione appropriata nel tuo 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()") 
    } 
} 
Problemi correlati