我为我的自定义 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 + {”时,DevTool将自动打开。当我在网页的文本框中输入“t”时,网页将自动重新加载。如何解决这个问题?
cefsharp版本是92.0.260,.netfamework4.6
我认为可能由于某些原因,按钮映射不正确。
如果问题只是“t”和“shift + {”那么我认为以下更改将解决您的问题。但如果其他按钮有问题,我认为最好向“Cefsharp.Winforms”作者寻求错误修复或指导。
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)
browser.Reload();
}
break;
}
return false;
}