Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for aria-controls #8983

leonardder opened this issue Nov 27, 2018 · 6 comments


Copy link

@leonardder leonardder commented Nov 27, 2018

I'd have thought that an issue for this would already be here, but it doesn't seem to be the case.

Steps to reproduce:

Open the following in Firefox or Chrome:
data:text/html, <button aria-controls="test">This button controls something</button><div id="test">something</div>

Actual behavior:

NVDA doesn't announce anything for the button or the something section beneath it.

Expected behavior:

NVDA should somehow announce that aria-controls is set on the button, referring to the something div.

System configuration:

NVDA Installed/portable/running from source:


NVDA version:

NVDA 2018.3.2

Windows version:

Windows 10 October update

Name and version of other software in use when reproducing the issue:

Firefox 63.0.3
Chrome 70.0.3538.110
Microsoft Edge

Additional details

In Chrome and Firefox, there is a relationship between the button and the div. On the button, the controllerFor relation refers to the div, and on the div, the controlledBy relation refers to the button.

Implementation ideas

In JAWS, when the button is focused, JAWS allows you to press jaws+alt+m to quickly jump to the controlled element. There are several disadvantages in this implementation:

  1. It is pretty verbose
  2. It doesn't allow you to jump back from the controlled element to the controlling element
  3. I believe that it does not deal properly with an element controlling multiple other elements, which is allowed according to the spec.

I propose two separate gestures that allow to jump to controlled or controlling elements, respectively. If the number of elements is 1, NVDA should instantly jump to the particular element. If the number of elements is more then 1, I propose showing a context menu like shown when entering a keyboard input gesture in the input gestures dialog.

CC @MarcoZehe, @michaelDCurran, @bramd, @josephsl, @derekriemer, @jcsteEbh


This comment has been minimized.

Copy link
Collaborator Author

@leonardder leonardder commented Aug 10, 2019

@JulienCochuyt What do you think about this issue?


This comment has been minimized.

Copy link

@JulienCochuyt JulienCochuyt commented Aug 12, 2019

@leonardder, I think your proposed UX is worthwhile.
The two gestures could (should?) be somewhat logically linked, like adding shift to the first to obtain the second or using two related keys (neighbors, arrows, ...).
Furthermore, the same gestures could be used to implement navigability to/from flowto regions (#4049). I doubt there could be a collision between the two concepts, but even then, the opening menu you propose would allow for choosing the desired navigation target.

Have you already thought on how to signal the availability of such navigation with speech and braille?


This comment has been minimized.

Copy link
Collaborator Author

@leonardder leonardder commented Aug 16, 2019

It looks like firefox only gives us the first target even though maxtargets is 0. See


This comment has been minimized.

Copy link

@Adriani90 Adriani90 commented Aug 16, 2019

cc: @jcsteh


This comment has been minimized.

Copy link

@MarcoZehe MarcoZehe commented Aug 16, 2019

Moved it to the right component. Thanks for reporting @leonardder. :)


This comment has been minimized.

Copy link
Collaborator Author

@leonardder leonardder commented Aug 20, 2019

The Mozilla bug was fixed in nightly, thanks to the work by @jcsteh.

I have a prototype implementation in

It currently does the following:

  1. At the NVDAObject level, it implements the controllerFor and controlledBy properties
  2. Add the virtual buffer level, it exposes unique IDs for controlledBy and controllerFor on VBuf nodes. Adding an additional relation to a node can be accomplished by adding just a single line.

I just removed the blocked label, but now realised this is blocked by #10098. Announcing these relations with sound is really preferred over some obnoxious text.

@leonardder leonardder added the blocked label Aug 20, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet
5 participants
You can’t perform that action at this time.