0

我需要使用 GeckoFX Web Control 在网页中发送 Enter 按键事件。

我不能使用 SendKeys.Send({ENTER})

有没有办法在网页中通过 Javascript 发送输入?

4

2 回答 2

1

这是巫毒魔法:

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);
于 2013-04-18T00:27:56.003 回答
1

由于您使用的是 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 特权。

于 2012-02-09T05:21:40.227 回答