故障排查指南

Kobo Web Reader 不会朗读?原因在这里

Kobo 的浏览器版(readnow.kobo.com)把每一章渲染进独立的 iframe(用 srcdoc 注入 HTML),普通 TTS 扩展只读 document.body,发现里面是空的就放弃了。能正确处理这种结构的扩展只有一个。

Chrome / Edge / Firefox · 不用注册 · 无需 Kobo Plus

为什么其他扩展在 Kobo 上失效

如果你已经在 readnow.kobo.com 上试过 Read Aloud、Speechify、NaturalReader 或浏览器自带的 TTS,大概率你看到的是这些症状之一:按播放后一片寂静、扩展只读出导航栏(「书库——搜索——设置」)、读完第一段就停、不会自动翻页要每分钟点一次下一页按钮。这些症状的根源是同一个。

普通 TTS 扩展在 Kobo 上失效的 4 个原因

  • 每一章都用同源 iframe(srcdoc)单独加载。外层页面的 document.body 几乎是空的——真正的书本文字全在 iframe.contentDocument 里。
  • Kobo 用横向 CSS 列把每个 iframe 的内容分成多页。一个长段落会被拆到两到三栏里,普通提取器读完第一栏、跳过第二栏的剩余、再跳到第三栏,音频节奏完全错乱。
  • Kobo 翻页用的是给 iframe 队列加 CSS transform: translateX(...)。普通扩展检测视口变化太晚,结果读的是已经被左移出屏幕的段落。
  • Kobo 不提供「朗读」按钮,没有 TTS 用的可访问性 API,也没有音频导出。唯一可行的路径是把 iframe 内容渲染出来再读——这恰好是 99% 的 TTS 扩展做不到的。

在 Kobo Web Reader 上的实测

用一本付费 Kobo 书在 readnow.kobo.com 实测——什么真的能播放

✗ Fails

Read Aloud(Chrome 扩展)

只读出导航菜单。无法访问 iframe.contentDocument。

✗ Fails

Speechify

什么都不播。检测不到 iframe srcdoc 内容是可读文本。

✗ Fails

NaturalReader

读完页面 chrome 就停。无法跨越 iframe 边界。

✗ Fails

Microsoft Edge 自带朗读

按钮置灰——Edge 无法在 Kobo 的 iframe 结构里找到可读文本。

✗ Fails

Chrome Live Caption / 划选朗读(ChromeOS)

只读系统 UI 文字,永远读不到书内容。

✗ Fails

macOS / iOS 朗读屏幕

能读出可见文字但识别不出 Kobo 的多列布局——分栏处会把句子从中间切断。

✓ Works

CastReader

遍历所有同源 iframe,定位用户当前真正看到的那个 iframe,找到此刻视口里至少 50% 可见的第一段(fragment 级),然后跨 iframe 边界连续朗读,段落级高亮跟随,自动按 Kobo 的下一页按钮翻页。

CastReader 是怎么处理 Kobo iframe 结构的

Kobo 的阅读器结构很特殊——大部分 TTS 扩展从来没有为 EPUB-in-iframe 这种横向铺开的结构设计过。CastReader 是 2026 年初专门为这套结构重写的。

1

iframe 枚举 + 阅读顺序排序

遍历页面里所有同源 iframe,跳过跨域的 contentDocument 或内容少于 50 字符的,然后按视觉位置(从上到下、从左到右)排序。Kobo 一次会预加载约 13 章节为 iframe——它们必须按用户阅读顺序排列,而不是 DOM 顺序。

2

用相交面积识别可见 iframe

Kobo 是横向铺开的阅读器——翻页时通过 CSS transform 把 iframe 队列横向平移。选取与外层视口相交面积最大的那个 iframe,而不是最靠近 (0, 0) 的那个。这是「从你正在看的位置开始读」体验的关键。

3

Fragment 级锚点选取(≥50% 规则)

在可见的那个 iframe 里,找到第一个段落,使其至少有一个 fragment 在外层视口内宽高都达到 ≥50%。CSS 列会把一个 <p> 拆到两栏,按 bounding rect 判断可见会把 column-1 的段落误判为可见——因为它的某个边缘从分栏间隙里露出来一点点。

4

跨 iframe 朗读 + 实时高亮跟随

跨 iframe 边界连续读,音频不间断。段落级高亮实时跟随音频游标。当高亮进入一个最后一个 fragment 即将离开视口的段落时,编排器自动按 Kobo 的下一页按钮。

5

只前不退的翻页器(不会回滚)

在 Kobo 翻页动画过程中,段落短暂横跨两页、出现负坐标。CastReader 的翻页器只往前——绝不会为了追陈旧的高亮把视口拉回去,避免你读到一半被「回滚」搞迷糊。

30 秒在 Kobo 上跑起来

1

安装扩展

从 Chrome 应用商店 / Edge / Firefox 应用商店安装。免费、不用注册。

2

打开 readnow.kobo.com

用 Kobo 或 Rakuten 账号登录,打开书架里任意一本——付费、免费试读、图书馆借阅都行。

3

点 CastReader 图标

立刻开始朗读。段落随音频高亮,读到页底自动翻页。

常见问题与排查

我点了 CastReader 但什么都没发生,为什么?

先确认你在 readnow.kobo.com 里(不是 Kobo 商店页或书架首页)。阅读器需要真的打开了一本书。如果已经在书里还是没反应,检查书有没有加载完——Kobo 是懒加载的,iframe srcdoc 内容要等一下。等到能滚动看到正文时再点一次。

CastReader 在朗读,但页面不会自动翻。

自动翻页只有在当前高亮段落的最后一个 fragment 即将离开视口时才会触发。如果你打开的是非常短的 Kobo 书或者刚翻到标题页,可能正文还不够长触发翻页。打开有完整正文的章节,翻页器就会按需向前翻。

朗读从章节中间开始读了,不是我正在看的位置。

CastReader 选的是当前视口里至少 50% 可见的第一个段落。如果你打开的位置上有两个段落都只是部分可见,它选覆盖率更高的那个。把你想开始的段落滚到完整可见,再点一次 CastReader——它会从那里开始。

段落跨栏时高亮就消失了。

这是 CastReader 1.0.5+ 修过的 bug。请确保升级到最新版本——修复用的是每个 fragment 的 client rect(不是 union bounding box)来判断可见性。如果还是会出现,请把书名和章节告诉我们。

CastReader 能用在 Kobo 桌面客户端(Mac / Windows)上吗?

不能。Kobo 桌面客户端用的是嵌入式 WebKit / Chromium webview,浏览器扩展无法注入进去。解法:在 Chrome、Edge 或 Firefox 里打开同一本书的 readnow.kobo.com 版本,书架和阅读进度会自动同步过去。

我用 Firefox,能用吗?

能用。CastReader for Firefox 处理 Kobo iframe 结构的方式和 Chrome 一致。从 Firefox 应用商店安装即可。(注:Chrome 上用 world:'MAIN' 注入的 main-world content script 在 Firefox 上是通过 <script> 标签注入,功能完全相同。)

第一页能朗读,翻一两页之后就停了。

通常是因为后续章节的 iframe 内容当时还没加载好。CastReader 会沿可见 iframe 切片渐进提取段落——但如果 Kobo 在你阅读时为了节省内存删除了较早的 iframe,音频流可能终止。刷新页面,从你停下的地方重新开始。

我的 Kobo 书是法语 / 德语 / 日语,听起来自然吗?

自然。CastReader 从 EPUB 元数据的 <html lang> 自动判断书的语言。支持 40+ 语种的自然 AI 真人音,包括法、德、意、西、葡、荷、波、捷、日、中、韩等。

CastReader 是 Kobo 官方出品吗?会不会影响我的账号?

不是 Kobo 官方——是独立开发的第三方浏览器扩展。它不登录你的 Kobo 账号、不修改书架、不向 Kobo 发数据。它只读取 iframe 里已经渲染出来的文本(你眼睛看到的同一段文字),用你电脑的扬声器播放音频。它无法影响你的 Kobo 账号。

Kobo 上听的书能发到手机听,比如通勤路上?

可以。Send to Phone 功能把桌面浏览器里的音频通过私有 Telegram 机器人推送到你手机上。桌面继续自动翻页,你在手机上听——不用订阅 Kobo Plus Listen。

别再跟 Kobo 阅读器较劲了

装一次扩展。打开任意 Kobo 书。按播放。结束。