Question

J'ai développé un OSK assez simple pour notre application de kiosque. Il fonctionne en ouvrant sur les événements onfocus tirés par textboxes dans notre application .net. Le problème est, nous essayons d'intégrer un seul service d'authentification qui signifie que nous ouvrirons un contrôle WebBrowser pour gérer l'authentification des tiers. Étant donné que les zones de texte pour la page d'authentification unique sont à l'intérieur du contrôle du navigateur, je ne suis pas tout à fait sûr de la meilleure façon d'utiliser l'OSK existant ou si je peux même.

Mes premières pensées sont d'essayer une sorte de javascript injection pour ajouter des événements que ma demande peut répondre. Ensuite, je devrais être en mesure de dire quand une zone de texte reçoit le focus, et ouvrez le OSK. Une fois que l'OSK est fermé, je peux mettre à jour champ de formulaire avec la valeur qui a été tapé. Mon problème est qu'il semble être assez fragile. Un changement de html / js sur la page SSO pourrait gâcher le processus d'inscription dans tous les kiosques.

L'autre option que je vois est de supprimer la OSK que j'ai et utiliser un niveau inférieur. Le problème que je vois avec cette approche est pauvre du logiciel Possibilité de programmation OSK me semble être de trouver. Je essentiellement besoin de lancer une 3ème partie exe chaque fois que je devais obtenir l'entrée du clavier de l'utilisateur et il ne semble pas aussi lisse comme d'une intégration que je pouvais obtenir avec la solution existante.

Je pourrais aller avec un mélange des deux, en utilisant notre OSK pour les contrôles WinForms normaux et passer à la 3ème partie OSK chaque fois que je dois utiliser le webcontrol, mais je pense que tout le monde pourrait voir le problème avec cette approche.

Des conseils / suggestions sur la voie à suivre, et toute aide à la mise en œuvre d'une injection javascript générique pour me permettre d'utiliser mon OSK existant serait génial!

Était-ce utile?

La solution

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top