2017-02-10 91 views
1

我有winforms應用程序包含cefsharp ChromiumWebBrowser組件。我想讓JAWS閱讀它的內容。現在JAWS只讀取主窗口的標題。有什麼辦法可以做到這一點?我嘗試過「強制渲染器 - 可訪問性」標誌,但它沒有幫助我。如何讓JAWS屏幕閱讀器識別並閱讀cefsharp ChromiumWebBrowser控件的內容?

這裏是我試過的代碼:

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

你的代碼有什麼問題?爲什麼它不起作用? –

+0

默認情況下,瀏覽器運行在不同的消息循環中。搜索消息循環的一般用法指南以獲取詳細信息 – amaitland

回答

1

繼amaitland的提示上面我們發現了以下的解決方案。

禁用MultiThreadedMessageLoop - 然後您需要根據下面的原始示例定期調用DoMessageLoopWork。

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

     browser = new ChromiumWebBrowser ("https://devsandbox.surpass-preview.com/launchtest"); 

     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())); 
    } 
+0

DoMessageLoopWork應該每秒運行大約60次,轉換爲每16ms大約一次。過於頻繁地運行會產生不可預測的後果。 – amaitland

+0

好的,這是偉大的信息謝謝。我對此一無所知。 –