Frage

Ich habe eine ziemlich einfache OSK für unsere Kiosk-Anwendung entwickelt. Es funktioniert durch die von Textboxen in unserer .net App beschossen die onfocus Ereignisse zu öffnen. Das Problem ist, wir versuchen, mit einem Single-Sign-On-Dienst zu integrieren, was bedeutet, werden wir ein WebBrowser-Steuerelement werden Öffnen die Dritte Authentifizierung zu behandeln. Da die Textfelder für die SSO-Seite im Browser Kontrolle sind, bin ich nicht ganz sicher, den besten Weg, die bestehende OSK zu verwenden, oder wenn ich selbst kann.

Meine erste Gedanken sind eine Art von JavaScript-Injektion, um zu versuchen, Ereignisse hinzuzufügen, die meine Anwendung zu reagieren. Dann sollte ich in der Lage sein zu sagen, wenn ein Textfeld den Fokus erhält, und die OSK zu öffnen. Sobald das OSK geschlossen ist, kann ich Formularfeld mit dem Wert aktualisieren, die eingegeben wurde. Mein Problem dabei ist es ziemlich zerbrechlich zu sein scheint. Eine Änderung in html / js auf der SSO-Seite könnte den Anmelde-Prozess für alle Kioske vermasseln.

Die andere Option, die ich sehe, ist die OSK Ich habe verschrotten und ein niedrigeres Niveau ein verwenden. Das Problem, das ich mit diesem Ansatz ist die schlechte Programmierbarkeit der OSK Software Ich scheine zu finden sein. Ich müsste im Wesentlichen eine 3rd-Party-exe starten, wann immer ich benötigte Tastatureingabe von dem Benutzer zu bekommen, und es wäre nicht wie so glatt eine Integration scheint, als ich mit der vorhandenen Lösung bekommen.

kann ich mit einer Mischung aus dem beide geht, mit unserem OSK für normalen WinForms-Steuerelemente und wechseln Sie auf den 3rd-Party-OSK, wenn ich die webcontrol verwenden müssen, aber ich denke, dass jeder das Problem mit diesem Ansatz sehen konnte.

Jede Beratung / Vorschläge, auf dem Weg zu gehen, und jede Hilfe bei der Umsetzung eine generische Javascript-Injektion mich zu erlauben, meinen vorhandenen OSK zu verwenden wäre toll!

War es hilfreich?

Lösung

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top