如何让JAWS屏幕阅读器识别并读取cefsharp ChromiumWebBrowser控件的内容?

4

我有一个包含cefsharp ChromiumWebBrowser组件的winforms应用程序。我希望JAWS能够读取它的内容。现在JAWS只读取主窗口的标题。有没有办法实现这个功能?我尝试了"force-renderer-accessibility"标志,但没有帮助。

以下是我尝试过的代码:

var settings = new CefSettings()
        {
            CefCommandLineArgs = { new KeyValuePair<string, string>("force-renderer-accessibility", "true") }
        };            
        Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);

你的代码出了什么问题?为什么它不能正常工作? - Lukas Körfer
默认情况下,浏览器在不同的消息循环中运行。有关详细信息,请搜索消息循环的常规使用指南。 - amaitland
1个回答

2

根据amaitland的提示,我们找到了以下解决方案。

禁用MultiThreadedMessageLoop - 然后你需要定期调用DoMessageLoopWork,如下面的简单示例。

        var settings = new CefSettings()
        {
          MultiThreadedMessageLoop = false
        };            
        Cef.Initialize(settings);

        browser = new ChromiumWebBrowser ("https://url.com/");

        var t = new Timer {Interval = 5};
        t.Start();
        t.Tick += t_Tick;

        this.panel1.Controls.Add(browser);

    }

    void t_Tick(object sender, EventArgs e)
    {
        this.BeginInvoke((Action) (() => Cef.DoMessageLoopWork()));
    }

DoMessageLoopWork 每秒应该运行大约 60 次,这相当于每16毫秒运行一次。 运行太频繁会有意想不到的后果。 - amaitland
好的,非常感谢这些有用的信息。我之前不太确定。 - David Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接