aria-prohibited-children
Los roles contenedores no deben incluir hijos con roles no permitidos
Comprueba que todo elemento incluido en el árbol de accesibilidad de un rol contenedor (list, listbox, menu, menubar, radiogroup, rowgroup, table, grid, treegrid, tablist, tree, row), ya sea por descendencia o mediante aria-owns, tenga uno de los roles permitidos para ese rol.
Ámbito de aplicación. Se aplica a elementos con un rol explícito y válido que sea uno de los roles contenedores con una entrada documentada de "required owned elements" (la misma tabla que usa aria-required-children).
Resultado esperado. Todo elemento incluido en el árbol de accesibilidad del contenedor mediante descendencia o aria-owns (tras eliminar los elementos role="none"/"presentation", y cualquier envoltorio "group"/"rowgroup" que nombre el propio conjunto de roles requeridos del contenedor, como transparentes para esta comparación según WAI-ARIA, independientemente de si "group"/"rowgroup" forma parte del propio conjunto de roles requeridos del contenedor) tiene un rol de ese mismo conjunto de roles requeridos. Ningún otro elemento es un hijo directo estructuralmente válido de un rol compuesto/contenedor, donde "permitido" son los roles requeridos del contenedor más un pequeño conjunto de roles que puede incluir sin que sean obligatorios (un separador entre elementos de menú, un caption en un grid). Se desciende dentro de un envoltorio sin rol para llegar a los elementos que una biblioteca de componentes entierra dentro de él, pero una vez que se encuentra uno ahí, el resto del subárbol de ese envoltorio es contenido propio del elemento y no se evalúa contra el contenedor.
Qué informa un hallazgo.
containerRole: el rol del contenedor.containerSelector: un selector del contenedor.allowedOwnedRoles: los roles que el contenedor puede poseer. Cada elemento es un nombre de rol.childRole(un hijo con rol): el rol del hijo, que no es ninguno de ellos; en un enlace, un botón u otro control que puede recibir el foco por sí mismo, el rol que tiene su elemento (link,button).nullen un hijo sin rol.attr(un hijo sin rol, o uno que puede recibir el foco por sí mismo): lo que lo convierte en un nodo propio: el atributo aria-* global que lleva,tabindex, onativeFocusablecuando puede recibir el foco sin ninguno de ellos (un enlace, un botón).
Estos campos de data.details ayudan a leer y reproducir un hallazgo. Salvo reasonCode y los pocos campos que Esquema de salida indica como estables, no son un contrato estable: un campo puede cambiar de nombre o desaparecer en una versión menor, así que no construyas sobre ellos.
Ejemplos
<ul role="menubar"><li role="menuitem">File</li><li role="menuitem">Edit</li></ul>
Ambos hijos incluidos son roles que la especificación de menubar permite.
<div role="table"><div role="row"><div role="cell">x</div></div><div role="button">Not a valid table child</div></div>
role="table" solo permite hijos row (o rowgroup); el button es un hijo incluido no permitido.