1

キオスク アプリケーション用にかなり単純な OSK を開発しました。これは、.net アプリのテキスト ボックスによって発生する onfocus イベントを開くことで機能します。問題は、シングル サインオン サービスと統合しようとしているということです。これは、サード パーティ認証を処理するために Web ブラウザー コントロールを開くことを意味します。SSO ページのテキスト ボックスはブラウザー コントロール内にあるため、既存の OSK を使用する最善の方法が完全にはわかりません。

私の最初の考えは、アプリケーションが応答できるイベントを追加するために、ある種の JavaScript インジェクションを試すことです。次に、テキスト ボックスがいつフォーカスを受け取るかを判断し、OSK を開くことができるはずです。OSK が閉じたら、入力した値でフォーム フィールドを更新できます。これに関する私の問題は、それが非常に壊れやすいように見えることです。SSO ページの html/js を変更すると、すべてのキオスクのサインイン プロセスが混乱する可能性があります。

私が見る他のオプションは、私が持っているOSKを破棄して、より低いレベルのものを使用することです. このアプローチで私が目にする問題は、私が見つけたように見える OSK ソフトウェアの貧弱なプログラム可能性です。ユーザーからキーボード入力を取得する必要があるときはいつでも、基本的にサードパーティのexeを起動する必要があり、既存のソリューションで得られるほどスムーズな統合には思えません。

通常の winforms コントロールに OSK を使用し、Web コントロールを使用する必要があるときはいつでもサードパーティの OSK に切り替えることで、2 つを組み合わせることもできますが、誰もがそのアプローチの問題を認識できると思います。

どちらに進むべきかについてのアドバイス/提案、および既存の OSK を使用できるようにするための一般的な JavaScript インジェクションの実装に関するヘルプは素晴らしいでしょう!

4

1 に答える 1

0
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);
}
于 2009-06-02T18:39:26.860 に答える