我需要使用 GeckoFX Web Control 在网页中发送 Enter 按键事件。
我不能使用 SendKeys.Send({ENTER})
有没有办法在网页中通过 Javascript 发送输入?
我需要使用 GeckoFX Web Control 在网页中发送 Enter 按键事件。
我不能使用 SendKeys.Send({ENTER})
有没有办法在网页中通过 Javascript 发送输入?
这是巫毒魔法:
C# COM 版本,将 ENTER 按键发送到 GeckoWebBrowser 中的 GeckoNode。不幸的是,我还没有在 GeckoFX 18 中找到合适的包装器,所以所有工作都是通过 xpcom 完成的。
13是回车码,如果需要发送字符,设置为0,并将charcode作为InitKeyEvent的最后一个参数
这里 e 是您将按键调度到的对象。
nsIDOMKeyEvent Event = Xpcom.QueryInterface<nsIDOMKeyEvent>(Browser.Window.DomWindow.GetDocumentAttribute().CreateEvent(new nsAString("KeyEvents")));
Event.InitKeyEvent(new nsAString("keypress"), true, true, Browser.Window.DomWindow, false, false, false, false, (uint)13, (uint)0);
Xpcom.QueryInterface<nsIDOMEventTarget>(e.DomObject).DispatchEvent(Event);
JavaScript 版本,如果您可以注入 javascript,这将在 javascript 环境中执行相同的操作
var Event = document.createEvent("KeyEvents");
Event.initKeyEvent('keypress', true, true, window, false, false, false, false, 13, 0);
e.dispatchEvent(Event);
由于您使用的是 geckofx,您可以使用 nsIDOMWindowUtils 接口发送按键。
var GeckoWebBrowser browser = ...;
nsIDOMWindowUtils utils = Xpcom.QueryInterface<nsIDOMWindowUtils>(browser.Window.DomWindow);
using (nsAString type = new nsAString("keypress"))
{
utils.SendKeyEvent(type, 0, 13, 0, false);
}
请注意,通常不能从普通 javascript 使用 nsIDOMWindowUtils 接口,因为它需要 UniversalXPConnect 特权。