Domanda

Ho sviluppato un piuttosto semplice OSK per la nostra applicazione chiosco. Funziona con l'apertura sugli eventi onFocus sparati da caselle di testo nel nostro .net app. Il problema è, stiamo cercando di integrare con un unico servizio di sign-on che significa che apriremo un controllo WebBrowser per gestire il terzo di autenticazione partito. Dal momento che le caselle di testo per la pagina SSO sono all'interno del controllo del browser, non sono del tutto sicuro che il modo migliore per utilizzare l'OSK esistente, o se ho anche possibile.

I miei pensieri iniziali sono a provare una sorta di javascript iniezione per aggiungere eventi che la mia domanda può rispondere. Allora dovrei essere in grado di dire quando una casella di testo riceve il fuoco, e aprire l'OSK. Una volta dell'OSK è chiuso, posso aggiornare campo del modulo con il valore che è stato digitato. Il mio problema è che sembra essere abbastanza fragile. Un cambiamento di html / js sulla pagina SSO potrebbe rovinare il processo di accesso per tutti i chioschi.

L'altra opzione che vedo è quella di abolire l'OSK che ho e utilizzare un livello inferiore. Il problema che vedo con questo approccio è il povero programability del software OSK mi sembra di trovare. Vorrei in sostanza bisogno di lanciare una terza exe festa ogni volta che avevo bisogno di avere input da tastiera da parte dell'utente e non sarebbe sembrare più agevole di un'integrazione, come ho potuto ottenere con la soluzione esistente.

Potrei continuare con un mix dei due, utilizzando il nostro OSK per normali controlli WinForms e passare alla terza OSK partito ogni volta che ho bisogno di usare il WebControl, ma penso che tutti potevano vedere il problema con questo approccio.

Qualche consiglio / suggerimenti sul quale strada da percorrere, e qualsiasi aiuto per l'attuazione di una generica javascript iniezione per permettermi di usare il mio OSK esistente sarebbe grande!

È stato utile?

Soluzione

private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.ObjectForScripting = this;
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(LoadComplete);
    webBrowser1.Navigate("http://www.google.com");
}

public void LoadComplete(object sender, WebBrowserDocumentCompletedEventArgs args)
{
    foreach(HtmlElement input in webBrowser1.Document.GetElementsByTagName("input"))
    {
        if (input.GetAttribute("type").ToLower() == "text")
        {
            input.Click += new HtmlElementEventHandler(Clicked);
        }
    }
}

public void Clicked(object sender, HtmlElementEventArgs args)
{
    // Show OSK, Get Results Text
        (sender as HtmlElement).SetAttribute("value", oskText);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top