Outdated Content!
The Protocols and Formats Working Group is no longer chartered to operate. Its work will continue in two new Working Groups:
- https://www.w3.org/WAI/APA/ Accessible Platform Architectures, to review specifications, develop technical support materials, collaborate with other Working Groups on technology accessibility, and coordinate harmonized accessibility strategies within W3C; and
- https://www.w3.org/WAI/ARIA/ Accessible Rich Internet Applications, to continue development of the Accessible Rich Internet Applications (WAI-ARIA) suite of technologies and other technical specifications when needed to bridge known gaps.
Resources from the PFWG remain available to support long-term institutional memory, but this information is of historical value only.
This Wiki page was edited by participants of the Protocols and Formats Working Group. It does not necessarily represent consensus and it may have incorrect information or information that is not supported by other Working Group participants, WAI, or W3C. It may also have some very useful information.
HTML 4.x as-built browser comparison
IE MSAA (same for IE 5-8) | IE8 UIA | Gecko | Opera 9.6 MSAA | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
HTML element | Role | Name | Value | State | Notes | Control Type | Notes | HTML element | Role | Name | Value | States | Relations | Actions | Events | Notes | Role | Name | Value | State | Notes |
<a href> | link | title' attribute, text within <a> element or 'alt'
attribute if image link. Concatenated if both text and image 'alt' attribute are provided |
href' attribute | note that this only applies when the ‘href’ attribute is present. It does not apply to <a name> | a | ROLE_SYSTEM_ LINK | n/a | value of @href attribute | STATE_SYSTEM_ SELECTABLE if @name attribute is presented |
n/a | "jump" if @href is valid | n/a | text | from child nodes | none | normal | |||||
<area> | |||||||||||||||||||||
<br> | br | ROLE_SYSTEM_ WHITESPACE | '\n' (new line char) | STATE_SYSTEM_ READONLY | n/a | n/a | n/a | ||||||||||||||
<button> | push button | text inside <button> element or 'title' attribute | button | ROLE_SYSTEM_ PUSHBUTTON | from child nodes | n/a | STATE_SYSTEM_ FOCUSABLE |
n/a | "press" | n/a | push button | from child nodes | |||||||||
caption | BSTR role | n/a | n/a | n/a | description_for (0x100f), points to table element | ||||||||||||||||
<div> | grouping | text inside the <div> element or ‘title’ attribute | div | BSTR role | n/a | n/a | n/a | n/a | n/a | n/a | text | from child nodes | |||||||||
<fieldset> | grouping | <legend> element | fieldset | ROLE_SYSTEM_ GROUPING | text equivalent from child legend element | n/a | n/a | labelled_by (1003), points to legend element | n/a | n/a | none found | ||||||||||
hr | ROLE_SYSTEM_ SEPARATOR | n/a | n/a | n/a | n/a | n/a | n/a | none found | |||||||||||||
h1-h6 | |||||||||||||||||||||
iframe | client | from document contained in frame (initially @src, but updated dynamically) | focusable | description from @longdesc | not in the tree for parent page. Acts like a separate browser window. | ||||||||||||||||
iframe | pane | from <title> of document contained in frame(initially @src, but updated dynamically) | |||||||||||||||||||
<img> | graphic | ‘alt’ attribute alt="" sets name to emtpy string |
img, input @type=image | ROLE_SYSTEM_ GRAPHIC | from @alt attribute, empty @alt attribute means name can't be calculated at all | n/a | STATE_SYSTEM_ ANIMATED if image has more than one frame | n/a | "showlongdesc" if @longdesc attribute is presented | n/a | if @usemap attribute is used then image accessible has children for each map item | graphic | alt | if alt="" the image is not added to the MSAA tree. | |||||||
<img usemap> | |||||||||||||||||||||
<input type = "button", "submit", or "reset"> | push button | value' attribute | input @type=button, submit, reset | ROLE_SYSTEM_ PUSHBUTTON | from @value attribute, @alt attribute, default label, @src attribute, @data attribute | n/a | STATE_SYSTEM_ DEFAULT if @type attribute has value "submit" | n/a | "press" | n/a | push button | value | |||||||||
<input type = "image"> | push button | alt' attribute or 'title' attribute, <label> element associated with it | img, input @type=image | ROLE_SYSTEM_ GRAPHIC | from @alt attribute, empty @alt attribute means name can't be calculated at all | n/a | STATE_SYSTEM_ ANIMATED if image has more than one frame | n/a | "showlongdesc" if @longdesc attribute is presented | n/a | if @usemap attribute is used then image accessible has children for each map item | not found | value (or text typed by user) | focusable, hot-tracked | input type=image does not appear in the MSAA tree, even with alt | ||||||
<input type = "text"> | editable text | <label> element associated with it or 'title' attribute | value' attribute | input @type=text, textarea | ROLE_SYSTEM_ TEXT | n/a | value property of input DOM element | STATE_SYSTEM_ READONLY if @readonly attribute is used | n/a | "activate" | n/a | editable text | from associated <label> | value (or text typed by user) | focusable, hot-tracked | ||||||
<input type = "password"> | editable text | <label> element associated with it or 'title' attribute | input @type=password | ROLE_SYSTEM_ TEXT | n/a | n/a | STATE_SYSTEM_ READONLY if @readonly attribute is used |
n/a | "activate" | n/a | editable text | from associated <label> | value (or text typed by user) | focusable, hot-tracked | NOTE: this appears to be a bug.
Password value is shown in clear text in MSAA and state is not protected |
||||||
<input type="checkbox"> | checkbox | <label> element associated with it or 'title' attribute | checked' attribute | input type="checkbox" | ROLE_SYSTEM_ CHECKBUTTON | n/a | n/a | STATE_SYSTEM_ MARQUEED used as state checkable |
n/a | "check"/"uncheck"/"cycle" depending on state | EVENT_OBJECT_ STATECHANGE when state is changed | check box | from associated <label> | selectable, hot-tracked |
|||||||
<input type="radio"> | radio button | <label> element associated with it or 'title' attribute | checked' attribute | input type="radio" | ROLE_SYSTEM_ RADIOBUTTON | n/a | n/a | STATE_SYSTEM_ MARQUEED used as state checkable |
n/a | "select" | EVENT_OBJECT_ STATECHANGE when state is changed | radio button | from associated <label> | focusable |
multiple radio buttons with the same name (or name not specified) create a parent with role=grouping | ||||||
label | ROLE_SYSTEM_ STATICTEXT | from child nodes | n/a | n/a | n/a | n/a | n/a | text | from child nodes | normal | |||||||||||
legend | ROLE_SYSTEM_ STATICTEXT | n/a | n/a | n/a | label_for (0x1002), points to caption element | n/a | n/a | text | from child nodes | normal | |||||||||||
li and others | ROLE_SYSTEM_ LISTITEM | n/a | n/a | STATE_SYSTEM_ READONLY | n/a | n/a | n/a | contains child accessible for list bullet | text | from child nodes | normal | ||||||||||
ol, ul and others | ROLE_SYSTEM_ LIST | n/a | n/a | STATE_SYSTEM_ READONLY | n/a | n/a | n/a | not in tree | |||||||||||||
optgroup | BSTR role | n/a | n/a | n/a | n/a | n/a | n/a | list item | label attribute | unavailable | |||||||||||
<option> | list item | Text inside the <option> element | ‘selected’ attribute | option | ROLE_SYSTEM_ LISTITEM | from @label attribute, from child text nodes | n/a | STATE_SYSTEM_ SELECTED if option is selected | n/a | "select" | EVENT_OBJECT_ SELECTIONWITHIN |
list item | selectable if @selected=selected, state+=selected |
||||||||
select @size > 1 | ROLE_SYSTEM_ LIST | n/a | n/a | STATE_SYSTEM_ MULTISELECTABLE if multiselectable | n/a | n/a | n/a | combo box | selected element @label if present, otherwise selected element child nodes | opera and IE are different here. IE supports<label> and title on select | |||||||||||
<select> | combobox, list, or dropdown list | <label> element associated with it or 'title' attribute | <option> element with 'selected' attribute set to "selected" | select @size = 1 | ROLE_SYSTEM_ COMBOBOX | n/a | name of focused option | STATE_SYSTEM_ EXPANDED if combobox open |
n/a | "open"/"close" depending on state | EVENT_OBJECT_ VALUECHANGE when selected option is changed | same | |||||||||
<table> | table | ‘title’ attribute | It is generally not a good idea to add title attributes to tables | table | ROLE_SYSTEM_ TABLE | from @summary attribute | n/a | described_by (0x100e) points to caption element | n/a | n/a | table | from summary | none | normal | |||||||
<textarea> | editable text | <label> element associated with it or 'title' attribute | text within <textarea> element | input @type=text, textarea | ROLE_SYSTEM_ TEXT | n/a | value property of input DOM element | STATE_SYSTEM_ READONLY if @readonly attribute is used | n/a | "activate" | n/a | editable text | from associated label element | from child nodes | normal | no support for @title | |||||
<td> | cell | ‘title’ attribute | It is generally not a good idea to add title attributes to <td> | what about th? | td | ROLE_SYSTEM_ CELL | n/a | n/a | n/a | n/a | n/a | n/a | cell | ||||||||
<th> | ROLE_SYSTEM_ CELL | n/a | n/a | n/a | n/a | n/a | n/a | column header | all th are column header role, even when at the beginning of a row of td | ||||||||||||
thead | ROLE_SYSTEM_ COLUMNHEADER | n/a | n/a | n/a | n/a | n/a | n/a | ||||||||||||||
<tr> | row | normal | |||||||||||||||||||
<span> | grouping | text inside the <span> element or ‘title’ attribute | text | from child nodes | none | normal | no support for @title | ||||||||||||||
Other html elements | editable text | text inside the element or ‘title’ attribute | It is generally not a good idea to add titles to text elements. | ||||||||||||||||||
abbr, acronym, blockquote, form, frame, h1-h6, iframe | BSTR role | n/a | n/a | n/a | n/a | n/a | n/a |