Skip to content

Accessibility APIs on iOS #4

@eeejay

Description

@eeejay

The iOS accessibility API documentation is incomplete, and many APIs that are needed for a web browser to support accessibility web standards are undocumented. Further, it’s difficult to infer how to use them based on WebKit’s open source implementation because there appears to be a closed-source system bundle which is tailored for and loaded into WebKit at runtime.

This lack of visibility makes it difficult to enumerate a full list of gaps. There are many closed-source methods loaded at runtime, and we don’t have visibility into their full signature or how they are used. Here are a couple examples that we know of:

  1. While some trait integer constants are public, others needed for a web engine like “visited”, or “radio button” are not.
  2. While some notification type integer constants are public, others needed for a web engine, like “value changed” are not. The closed-source bundle has a method loaded at runtime into the WebKit wrapper named accessibilityOverrideProcessNotification. It takes a string, such as AXValueChanged or AXSelectedTextChanged, internally maps it to a private integer constant representing the notification type, and forwards it to the platform via UIAccessibilityPostNotification.

Supporting accessibility web standards is table stakes functionality for a web browser. In order to do this, all of the accessibility APIs used by WebKit must be documented and stable, and WebKit should ideally consume them in the same manner as third-party browser engines.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions