我为自助服务终端应用程序开发了一个相当简单的OSK。它的工作原理是打开我们的.net应用程序中文本框触发的onfocus事件。问题是,我们正在尝试与单点登录服务集成,这意味着我们将打开一个webbrowser控件来处理第三方身份验证。由于SSO页面的文本框在浏览器控件中,我不完全确定使用现有OSK的最佳方式,或者我是否可以。
我最初的想法是尝试某种javascript注入,以便添加我的应用程序可以响应的事件。然后我应该能够判断文本框何时获得焦点,并打开OSK。关闭OSK后,我可以使用键入的值更新表单字段。我的问题是它看起来很脆弱。 SSO页面上html / js的更改可能会破坏所有信息亭的登录过程。
我看到的另一个选择是废弃我拥有的OSK并使用较低级别的OSK。我用这种方法看到的问题是我似乎发现的OSK软件的可编程性差。当我需要从用户那里获得键盘输入时,我基本上需要启动第三方exe,并且它看起来不像我可以使用现有解决方案那样顺利进行集成。
我可以使用两者的混合,使用我们的OSK进行正常的winforms控制,并在需要使用webcontrol时切换到第三方OSK,但我认为每个人都可以看到这种方法的问题。
有关哪条路的建议/建议,以及实现通用JavaScript注入以帮助我使用现有OSK的任何帮助都会很棒!
答案 0 :(得分: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);
}