我已经开发了我们的自助服务应用程序相当简单OSK。它的工作原理是打开由文本框在我们的.NET应用程序触发的事件聚焦状态。问题是,我们试图用单点登录服务,这意味着我们将打开一个网页浏览器控件来处理第三方认证集成。由于该SSO页的文本输入框是浏览器控件里面,我不能完全肯定使用现有的OSK最好的办法,或者如果我甚至可以。

我最初的想法是尝试某种JavaScript注入,以增加我的应用程序可以响应事件。然后,我应该能够知道,当一个文本框接收焦点,并打开OSK。一旦OSK被关闭,我可以与已输入的值更新表单字段。我对这个问题似乎是相当脆弱的。在SSO页上的HTML / JS的变化可能会搞糟的登录过程的所有信息亭。

另一种选择我看到的是报废OSK我有和使用较低的电平1。我用这种方法看到的问题是OSK软件的编程能力差我似乎找到。我基本上需要启动每当我需要从用户获取键盘输入的第三方exe文件,它似乎不会像那样顺利集成的,因为我可以与现有的解决方案中获得。

我可以与二者的混合去,用我们的OSK正常WinForms控件并切换到第三方OSK每当我需要使用三夏,但我认为每个人都可以看到这种做法的问题。

任何意见/建议在哪个方向走,并实施一个通用的JavaScript注入,让我用我的现有OSK将是巨大的帮助!

有帮助吗?

解决方案

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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top