目标
我们的用户使用Google文档。他们写的文字将在他们使用文字转语音键入时读给他们。 它应该在尽可能多的平台和浏览器中工作。
我们的解决方案
这似乎适合Google Apps Script,适用于所有桌面浏览器和某些移动浏览器。
此作品
我们有一个文字转语音模块,效果很好,所以没问题。 我们目前正在使用sidebar。侧边栏可以使用HTML 5 Audio tag播放音频,其工作没有任何问题。
问题
问题实际上是从Google文档文档中获取文本。 到目前为止,我还没有找到任何方法直接从侧边栏访问Google文档文本。 我们一直在做的是:
从用户在Google文档中输入文本到将更改同步到Google文档云时,需要一秒或更长时间。
我们有不同的步骤。文本转语音很快,HTML5音频也没问题。
时间接收器正在获得文字更改。它目前需要 1-3秒,这对我们的用例来说太长了。
问题
我们可以更快地访问Google文档中的文字吗?也许直接而不是通过谷歌的云?
UPDATE 2017-02-15 目前看来它是不可能的。 可以通过Chrome扩展程序执行此操作,它会解析Google文档主页并从HTML + JS中提取文本。这很难,但......可能。
答案 0 :(得分:1)
如果浏览器插件是提供此功能的合适方式,则应该可以在更新网页内容时收听Google文档对DOM所做的更改。
// This div contains all of the page content and not much else, in my rudimentary testing.
var pageRoot = document.getElementsByClassName('kix-appview-editor')[0].firstChild;
var observer = new MutationObserver(handleNewChanges);
observer.observe(pageRoot, {
subtree: true,
childList: true,
attributes: false,
});
// Later, you can stop observing
observer.disconnect();
只要DOM的内容发生变化,您的handleNewChanges
函数就会被调用,并带有更改列表。这些变化非常混乱,但
someNode.innerText
获取实际内容。通过观察更改并保持某些文档状态,您应该能够确定何时发生您所关注的更改。
这似乎非常适合您的用例,因为
不需要远程服务器。数据流看起来更像是这样,完全在浏览器标签中:
--------------- ----------
| Google Docs | <= fetch doc <= | Your |
| Document | => DOM changes => | Module |
--------------- ----------
更新与文档的视觉更新同步,这感觉就像触发此事一样自然。
解析每个DOM更改时需要执行的簿记量可能是不变的(即,不循环文档内容)。这意味着观察添加的开销是不变的,因此它应该扩展到任何大小的文档。
答案 1 :(得分:1)
您已经发现,浏览器扩展是一个很好的解决方案,它可能比您想象的要容易:Chrome的扩展API都有据可查,并且构建扩展与使用 HTML构建网页非常相似和 JavaScript 。
甚至还有一个extension API for TTS可以与自定义的 TTS引擎集成:
使用chrome.ttsEngine API实施文本语音转换(TTS)引擎 使用扩展名。如果您的扩展程序使用此API注册, 将收到包含要说的话语的事件以及其他 任何扩展程序或Chrome应用程序使用tts API进行操作时的参数 产生语音。然后,您的扩展程序可以使用任何可用的网站 合成和输出语音并将事件发回的技术 到调用函数以报告状态。