質問
私は、私たちのキオスクアプリケーションのためではなく、単純なOSKを開発しました。それは私たちの.NETアプリ内のテキストボックスで解雇ONFOCUSイベントに開くことで動作します。問題は、我々は、サードパーティの認証を処理するために、WebBrowserコントロールを開くことがありますを意味し、シングルサインオンサービスと統合しようとしている、です。 SSOページ用のテキストボックスには、ブラウザのコントロール内にあるので、私は、既存のOSKを使用するための最良の方法を完全にわからない場合、またはIさえもできます。
私の最初の考えは、私のアプリケーションが応答できるイベントを追加するためにはjavascriptの注入のいくつかの並べ替えをしようとしています。それから私は、テキストボックスがフォーカスを受け取ったときに言うと、OSKを開くことができます。 OSKが閉じられると、私が入力した値でフォームフィールドを更新することができます。これで私の問題は、非常に壊れやすいように思わです。 SSOページ上のHTML / JSの変化のすべてのキオスクのために台無しにサインインプロセスをでします。
私が見る他のオプションは、私が持っているOSKをスクラップし、下位レベル1を使用することです。私はこのアプローチを参照の問題は、私が見つけているように見えるOSKソフトウェアの貧弱なプログラム可能性です。私は基本的に私は、ユーザーからのキーボード入力を取得するために必要な時はいつでも、サードパーティのexeファイルを起動する必要があるだろうと私は、既存のソリューションを得ることができるように、統合のように滑らかように見えるではないでしょう。
私は、通常のWinFormsのコントロールのために私たちのOSKを使用して、2のミックスで行くと、私はWebBrowserコントロールを使用する必要がある時はいつでも、サードパーティのOSKに切り替えるが、私は、誰もがそのアプローチの問題を見ることができると思うことができます。
行く、と私は私の既存のOSKを使用することを可能にするために、一般的なJavaScriptの注入を実装上の任意のヘルプは素晴らしいことだその途中で何かアドバイス/提案を!
解決
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);
}