Skip to main content

Unsupported Content

Some content cannot be read, or can be read but not highlighted. This page lists the cases, so they can be recognised quickly rather than debugged.

PDFs

PDFs are not supported in any browser. This is not a bug and it is not fixable from the extension.

Chrome, Firefox and Safari all render PDFs in a privileged internal viewer that content scripts cannot run in. There is no page for the reader to attach to.

The extension popup detects a PDF tab — the URL matches \.pdf($|[?#]) — and shows a "PDF documents are not supported" notice instead of playback controls that could not work.

If a document needs to be read aloud, it has to be available as HTML.

Shadow DOM

Text inside a Shadow DOM is skipped. The reader logs a warning when it finds some.

Many design-system components (and some cookie banners and chat widgets) render into shadow roots. Content that matters should live in ordinary DOM.

Canvas

Anything drawn to a <canvas> is invisible to the reader — there is no text to extract. Google Docs is the exception, and only because it exposes a separate text export; see Hosted Editors.

Editable regions

Text inside [contenteditable] is read, but it is never highlighted.

Rich-text editors — ProseMirror, TipTap, Quill, Slate, CKEditor, Draft.js — observe their own DOM. Injecting highlight spans into one risks the editor treating them as part of the document and saving them. Skipping the highlight is the safe trade.

Tags the chunker never sees

<div>, <span>, <select>, <input> and <textarea> are not in the extraction selector, so their text is silent. The readable set is:

p, h1–h6, li, td, th, blockquote, button, a, figcaption

plus <img> with a non-empty alt, when Announce media is on.

If content needs reading, wrap it in one of those tags — or add a visually hidden <p> for state announcements that would otherwise go unspoken.

Other silent cases

CaseBehaviour
Text outside the containerOnly the first matching container is read: article → main → [role="main"] → … → body.
Very short stringsNon-heading text under 2 characters is dropped as decorative.
Pages over 50,000 charactersTruncated at MAX_PAGE_CHARS; the panel says so.
aria-hidden="true"Ignored — only display and visibility hide an element from the reader.
No internet connectionNothing is read. The ABAIR API is the only speech backend; there is no offline fallback.

Last updated 2026-07-22