我已经实现了自定义ContextMenuHandler
:
public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
{
if (commandId == (CefMenuCommand)26501)
{
// custom logic
return true;
}
if (commandId == CefMenuCommand.Back)
{
Dispatcher.CurrentDispatcher.Invoke(() =>
{
if (chromiumWebBrowser.CanGoBack) chromiumWebBrowser.Back();
});
}
return true;
}
自定义命令按预期工作。但是,Back-command不起作用。该线程无权访问浏览器实例:
调用线程无法访问此对象,因为另一个线程拥有它。
省略调度逻辑并不能解决问题。
解决方案是不在switch-case中包含Back
-command而是返回false。
public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
{
if (commandId == (CefMenuCommand)26501)
{
// custom logic
return true;
}
return false;
}