【问题标题】:SendKey Enter into Browser Control WinForm .NetSendKey 进入浏览器控件 WinForm .Net
【发布时间】:2012-02-03 10:20:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript .net browser sendkeys geckofx


    【解决方案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 特权。

    【讨论】:

      【解决方案2】:

      这是巫毒魔法:

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-30
        • 2018-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多