我需要使用GeckoFX Web Control在网页中发送Enter键按事件。
我无法使用SendKeys.Send({ENTER})
有没有办法通过网页中的Javascript发送回车?
答案 0 :(得分: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特权。
答案 1 :(得分: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);