2017-02-10 1 views
1

J'ai une application winforms qui contient le composant cefsharp ChromiumWebBrowser. Je veux que JAWS lise son contenu. Maintenant, JAWS ne lit que le titre de la fenêtre principale. Y'a-t-il une quelconque façon de réussir cela? J'ai essayé le drapeau "force-renderer-accessibility" mais ça ne m'a pas aidé.Comment faire pour que le lecteur d'écran JAWS reconnaisse et lise le contenu du contrôle cefsharp ChromiumWebBrowser?

Voici le code i essayé:

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

Quel était le problème de votre code? Pourquoi cela n'a-t-il pas fonctionné? –

+0

Par défaut, le navigateur est exécuté dans une boucle de message différente. Recherchez le guide général d'utilisation de la boucle de message pour plus de détails. – amaitland

Répondre

1

Après ci-dessus, nous avons trouvé incité la solution suivante de amaitland.

Désactiver MultiThreadedMessageLoop - vous devez ensuite appeler périodiquement DoMessageLoopWork selon l'exemple brut ci-dessous.

 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 doit être exécuté environ 60 fois par seconde, ce qui correspond à environ 16 ms. Courir trop souvent a des conséquences imprévues. – amaitland

+0

Ok c'est une bonne information merci. Je n'étais pas sûr à ce sujet. –