Zotero and Screen Readers

During accessibility testing, there were various configuration options (and some bugs) that we discovered with different screen readers. Below we document how to get the most out of using different screen readers with Zotero, as well as where there might be incompatibilities that we are not currently able to fix.

macOS

  • Ensure that Settings > Keyboard > Keyboard navigation setting is toggled on. It is required for keyboard navigation to properly work.
  • Make sure that the VoiceOver QuickNav setting is toggled off. It allows one to move focus in unwanted ways and, in addition, can move the cursor onto nodes that are not supposed to be focusable. There are cases when it’s helpful but as a general rule, we don’t recommend it.
  • Known VoiceOver issue in Firefox and Zotero: aria-readonly/readonly properties are ignored and inputs with those props are announced as editable fields.

Windows (NVDA)

NVDA is the most reliably working screen reader with Zotero and never caused any issues. No changes to the default configuration are needed.

Windows (JAWS)

  • JAWS should be started before opening Zotero. There is some special setup that runs on start if it is detected that JAWS is running.
  • By default, JAWS will not announce description aria properties. This can be adjusted in Settings > Speech Verbosity > Verbosity Level. Click on the verbosity level setting button (“Beginner” by default), and enable “Control Description”.
  • JAWS may not always announce labels and descriptions of groups when the focus enters them. For example, the Linked Attachment Base Directory preference comment gets skipped. One can use the JAWS key (by default Insert) + Tab shortcut to have JAWS announce the currently focused element, which will force it to read out the parent group labels.
  • Virtual cursor should be avoided in Zotero, except for reading the content in reader tabs and the note editor. JAWS virtual cursor struggles with Zotero-specific XUL chrome windows but has no issues with virtual cursor inside of the <browser> nodes that render reader tabs, which is where it matters.
  • JAWS has a number of internal undocumented config files. The most important one is FsDomSrv.ini, which contains settings on how to handle desktop applications based on their window classes. JAWS does not have the right configuration there to handle alert windows in Zotero, which leads to poor handling of those (JAWS won’t read text in input and text fields).