Kobo 的浏览器版(readnow.kobo.com)把每一章渲染进独立的 iframe(用 srcdoc 注入 HTML),普通 TTS 扩展只读 document.body,发现里面是空的就放弃了。能正确处理这种结构的扩展只有一个。
Chrome / Edge / Firefox · 不用注册 · 无需 Kobo Plus
如果你已经在 readnow.kobo.com 上试过 Read Aloud、Speechify、NaturalReader 或浏览器自带的 TTS,大概率你看到的是这些症状之一:按播放后一片寂静、扩展只读出导航栏(「书库——搜索——设置」)、读完第一段就停、不会自动翻页要每分钟点一次下一页按钮。这些症状的根源是同一个。
用一本付费 Kobo 书在 readnow.kobo.com 实测——什么真的能播放
只读出导航菜单。无法访问 iframe.contentDocument。
什么都不播。检测不到 iframe srcdoc 内容是可读文本。
读完页面 chrome 就停。无法跨越 iframe 边界。
按钮置灰——Edge 无法在 Kobo 的 iframe 结构里找到可读文本。
只读系统 UI 文字,永远读不到书内容。
能读出可见文字但识别不出 Kobo 的多列布局——分栏处会把句子从中间切断。
遍历所有同源 iframe,定位用户当前真正看到的那个 iframe,找到此刻视口里至少 50% 可见的第一段(fragment 级),然后跨 iframe 边界连续朗读,段落级高亮跟随,自动按 Kobo 的下一页按钮翻页。
Kobo 的阅读器结构很特殊——大部分 TTS 扩展从来没有为 EPUB-in-iframe 这种横向铺开的结构设计过。CastReader 是 2026 年初专门为这套结构重写的。
遍历页面里所有同源 iframe,跳过跨域的 contentDocument 或内容少于 50 字符的,然后按视觉位置(从上到下、从左到右)排序。Kobo 一次会预加载约 13 章节为 iframe——它们必须按用户阅读顺序排列,而不是 DOM 顺序。
Kobo 是横向铺开的阅读器——翻页时通过 CSS transform 把 iframe 队列横向平移。选取与外层视口相交面积最大的那个 iframe,而不是最靠近 (0, 0) 的那个。这是「从你正在看的位置开始读」体验的关键。
在可见的那个 iframe 里,找到第一个段落,使其至少有一个 fragment 在外层视口内宽高都达到 ≥50%。CSS 列会把一个 <p> 拆到两栏,按 bounding rect 判断可见会把 column-1 的段落误判为可见——因为它的某个边缘从分栏间隙里露出来一点点。
跨 iframe 边界连续读,音频不间断。段落级高亮实时跟随音频游标。当高亮进入一个最后一个 fragment 即将离开视口的段落时,编排器自动按 Kobo 的下一页按钮。
在 Kobo 翻页动画过程中,段落短暂横跨两页、出现负坐标。CastReader 的翻页器只往前——绝不会为了追陈旧的高亮把视口拉回去,避免你读到一半被「回滚」搞迷糊。
从 Chrome 应用商店 / Edge / Firefox 应用商店安装。免费、不用注册。
用 Kobo 或 Rakuten 账号登录,打开书架里任意一本——付费、免费试读、图书馆借阅都行。
立刻开始朗读。段落随音频高亮,读到页底自动翻页。
先确认你在 readnow.kobo.com 里(不是 Kobo 商店页或书架首页)。阅读器需要真的打开了一本书。如果已经在书里还是没反应,检查书有没有加载完——Kobo 是懒加载的,iframe srcdoc 内容要等一下。等到能滚动看到正文时再点一次。
自动翻页只有在当前高亮段落的最后一个 fragment 即将离开视口时才会触发。如果你打开的是非常短的 Kobo 书或者刚翻到标题页,可能正文还不够长触发翻页。打开有完整正文的章节,翻页器就会按需向前翻。
CastReader 选的是当前视口里至少 50% 可见的第一个段落。如果你打开的位置上有两个段落都只是部分可见,它选覆盖率更高的那个。把你想开始的段落滚到完整可见,再点一次 CastReader——它会从那里开始。
这是 CastReader 1.0.5+ 修过的 bug。请确保升级到最新版本——修复用的是每个 fragment 的 client rect(不是 union bounding box)来判断可见性。如果还是会出现,请把书名和章节告诉我们。
不能。Kobo 桌面客户端用的是嵌入式 WebKit / Chromium webview,浏览器扩展无法注入进去。解法:在 Chrome、Edge 或 Firefox 里打开同一本书的 readnow.kobo.com 版本,书架和阅读进度会自动同步过去。
能用。CastReader for Firefox 处理 Kobo iframe 结构的方式和 Chrome 一致。从 Firefox 应用商店安装即可。(注:Chrome 上用 world:'MAIN' 注入的 main-world content script 在 Firefox 上是通过 <script> 标签注入,功能完全相同。)
通常是因为后续章节的 iframe 内容当时还没加载好。CastReader 会沿可见 iframe 切片渐进提取段落——但如果 Kobo 在你阅读时为了节省内存删除了较早的 iframe,音频流可能终止。刷新页面,从你停下的地方重新开始。
自然。CastReader 从 EPUB 元数据的 <html lang> 自动判断书的语言。支持 40+ 语种的自然 AI 真人音,包括法、德、意、西、葡、荷、波、捷、日、中、韩等。
不是 Kobo 官方——是独立开发的第三方浏览器扩展。它不登录你的 Kobo 账号、不修改书架、不向 Kobo 发数据。它只读取 iframe 里已经渲染出来的文本(你眼睛看到的同一段文字),用你电脑的扬声器播放音频。它无法影响你的 Kobo 账号。
可以。Send to Phone 功能把桌面浏览器里的音频通过私有 Telegram 机器人推送到你手机上。桌面继续自动翻页,你在手机上听——不用订阅 Kobo Plus Listen。