Pergunta

Eu desenvolvi um OSK bastante simples para a nossa aplicação de quiosque. Ele funciona através da abertura sobre os acontecimentos OnFocus disparado por caixas de texto em nossa .net aplicativo. O problema é que estamos a tentar integrar-se com um single sign-on serviço que significa que estará abrindo um controle webbrowser para lidar com o terceiro autenticação festa. Desde as caixas de texto para a página de SSO estão dentro do controle de navegador, não estou inteiramente certo a melhor maneira de usar o OSK existente, ou se eu ainda posso.

Meus pensamentos iniciais são para tentar algum tipo de injeção javascript para adicionar eventos que a minha candidatura pode responder. Então eu deveria ser capaz de dizer quando uma caixa de texto recebe o foco, e abra a OSK. Uma vez que o OSK está fechada, eu posso atualizar campo de formulário com o valor que foi digitado. Meu problema com isto é que parece ser bastante frágil. Uma mudança em html / js na página SSO poderia mexer processo até o sign-in para todos os quiosques.

A outra opção que vejo é para acabar com o OSK eu tenho e usar um nível inferior. O problema que vejo com esta abordagem é o pobre Programabilidade do software OSK I parecem estar encontrando. Eu seria, essencialmente, precisa lançar uma festa de 3 exe sempre que eu precisava para obter a entrada do teclado do usuário e que não iria parecer tão suave de uma integração como eu poderia começar com a solução existente.

Eu poderia ir com uma mistura dos dois, usando o nosso OSK para controles WinForms normais e mudar para a 3ª OSK partido sempre que eu precisar usar o WebControl, mas eu acho que todo mundo podia ver o problema com essa abordagem.

Qualquer aconselhamento / sugestões sobre qual caminho a percorrer, e qualquer ajuda na implementação de uma injeção javascript genérico para permitir que eu use a minha OSK existente seria ótimo!

Foi útil?

Solução

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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top