【问题标题】:Cefsharp with Winform: OnFocusedNodeChanged never called when the user changes the focus to another node带有 Winform 的 Cefsharp:当用户将焦点更改到另一个节点时,永远不会调用 OnFocusedNodeChanged
【发布时间】:2020-10-23 07:12:22
【问题描述】:

我正在尝试在 Cefsharp 和 Winform 需要时使用 OnFocusedNodeChanged 打开虚拟键盘,但从未调用此方法。我用错了吗?

代码是:

class CMSRenderBrowser : IRenderProcessMessageHandler
{
    public void OnFocusedNodeChanged(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IDomNode node)
    {
        var message = node == null ? "lost focus" : node.ToString();
        Console.WriteLine("OnFocusedNodeChanged() - " + message);
    }

    public void OnContextCreated(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame)
    {
    }

    public void OnContextReleased(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame)
    {
    }


    public void OnUncaughtException(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, JavascriptException exception)
    {
    }
}

这是.cs的主要形式:

public Form1()
    {
        InitializeComponent();
        ChromiumWebBrowser browser = new ChromiumWebBrowser("www.google.com");
        browser.RenderProcessMessageHandler = new CMSRenderBrowser();

        this.Controls.Add(browser);
        
    }

【问题讨论】:

  • 您是否有理由需要手动显示虚拟键盘?您在处理内置虚拟键盘时遇到问题吗?

标签: c# winforms cefsharp chromium-embedded


【解决方案1】:

因为它涉及从渲染进程向浏览器进程发送消息,所以默认情况下不启用。在调用Cef.Initialize 之前,您必须通过将CefSharpSettings.FocusedNodeChangedEnabled 设置为true 来启用它(如果您不自己调用Cef.Initialize,则在创建第一个ChromiumWebBrowser 实例之前)。

//This must be set before Cef.Initialized is called
CefSharpSettings.FocusedNodeChangedEnabled = true;

应更新文档以反映此要求(如果您有时间,请随时向https://github.com/cefsharp/CefSharp 提交 PR)。

【讨论】:

  • 哦,谢谢。最后澄清一下:我想知道这是否会减慢用户体验..
  • 不太可能,与 Chromium 内部发送的消息数量相比,发送的消息数量将是九牛一毛。
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
相关资源
最近更新 更多