输入“{”打开DevTools,在网页文本框中输入“t”刷新网页

问题描述 投票:0回答:1

我为我的自定义 cefsharp 浏览器实现了 IKeyboardHandler 接口。

代码示例如下所示:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            var browser = new ChromiumWebBrowser("https://google.com/");
            browser.KeyboardHandler = new PreviewKeyboardHandler();
            this.Controls.Add(browser);
            browser.Dock = DockStyle.Fill;
        }
    }

    public class PreviewKeyboardHandler : IKeyboardHandler
    {

        public PreviewKeyboardHandler()
        {
        }


        public bool OnKeyEvent(IWebBrowser chromiumWebBrowser, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey)
        {
            return false;
        }

        public bool OnPreKeyEvent(IWebBrowser chromiumWebBrowser, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
        {
            if (!chromiumWebBrowser.IsBrowserInitialized)
            {
                return false;
            }

            switch ((Keys)windowsKeyCode)
            {
                case Keys.F12:

                        browser.ShowDevTools();
                    break;
                case Keys.F5:
                    if (modifiers == CefEventFlags.ControlDown)
                    {
                        // ctrl + F5
                        browser.Reload(true);
                    }
                    else
                    {
                        // F5
                        browser.Reload();
                    }
                    break;
            }

            return false;
        }
}

我现在面临一些奇怪的行为。当我按“Shift”+“[”在网页文本框中输入“{”时,DevTools 会自动打开。当我在网页的文本框中输入“t”时,网页会自动重新加载。我该如何解决这个问题?

cefsharp版本为92.0.260,.NET Framework 4.6

c# winforms cefsharp .net-4.6
1个回答
0
投票

我认为由于某种原因,按钮使用“windowsKeyCode”映射不正确。 也许在“OnPreKeyEvent”中使用“nativeKeyCode”会更好,它会返回唯一的代码。

通过以下两种方式之一更改“OnPreKeyEvent”方法可以完全解决上述问题,但是如果您想解决“windowsKeyCode”值中的错误,最好询问“Cefsharp.Winforms”NuGet的作者打包以修复错误或从他们那里获取建议。

使用“nativeKeyCode”,代码修改如下:

    public bool OnPreKeyEvent(IWebBrowser chromiumWebBrowser, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
    {
        const int KEY_F5 = 0x3F0001;
        const int KEY_F12 = 0x580001;

        if (!chromiumWebBrowser.IsBrowserInitialized)
        {
            return false;
        }
        switch (nativeKeyCode)
        {
            case KEY_F12:
                browser.ShowDevTools();
                break;
            case KEY_F5:
                if (modifiers == CefEventFlags.ControlDown)
                {
                    // ctrl + F5
                    browser.Reload(true);
                }
                else
                {
                    // F5
                    browser.Reload();
                }
                break;
        }
        return false;
    }

但是如果你想使用“windowsKeyCode”的方式来实现,我不推荐这种方式,那么应该更改如下:

    public bool OnPreKeyEvent(IWebBrowser chromiumWebBrowser, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
    {
        if (!chromiumWebBrowser.IsBrowserInitialized)
        {
            return false;
        }

        switch ((Keys)windowsKeyCode)
        {
            case Keys.F12:
                if (modifiers != CefEventFlags.ShiftDown)
                    browser.ShowDevTools();
                break;
            case Keys.F5:
                if (modifiers == CefEventFlags.ControlDown)
                {
                    // ctrl + F5
                    browser.Reload(true);
                }
                else
                {
                    // F5
                    if (nativeKeyCode != 20)  // Keys.T - Keys.A + 1 = 20
                        browser.Reload();
                }
                break;
        }

        return false;
    }
© www.soinside.com 2019 - 2024. All rights reserved.