【问题标题】:Handle back command in custom ContextMenuHandler在自定义 ContextMenuHandler 中处理返回命令
【发布时间】:2019-03-21 16:26:29
【问题描述】:

我已经实现了一个自定义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-命令不起作用。该线程无权访问浏览器实例:

调用线程无法访问该对象,因为不同的 线程拥有它。

省略调度逻辑并不能解决问题。

  1. 我是否需要使用 if 语句显式处理 Back-命令(将被重构为 swicth-case,不用担心)
  2. 如果是,怎么做?
  3. 一般情况下,如何获取 Web 浏览器实例的调度程序?

【问题讨论】:

标签: chromium cefsharp


【解决方案1】:

解决方案是不在 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多