Mr.*_*olf 30 javascript google-docs google-apps-script google-drive-realtime-api
目标
我们的用户使用Google文档.他们写的文字将在他们使用文字转语音键入时读给他们.它应该在尽可能多的平台和浏览器中工作.
我们的方案
这似乎适合Google Apps脚本,适用于所有桌面浏览器和某些移动浏览器.
这有效
我们有一个文本转语音模块,效果很好,所以没问题.我们目前正在使用侧边栏.侧边栏可以使用HTML 5音频标签播放音频,无需任何问题.
问题
问题实际上是从Google文档文档中获取文本.到目前为止,我还没有找到任何方法直接从侧边栏访问Google文档文本.我们一直在做的是:
从用户在谷歌文档中输入文本到将更改同步到谷歌文档云时,需要一秒或更长时间.
我们计划了不同的步骤.文本转语音很快,HTML5音频也没问题.
该时间片是获得文本的变化.它目前需要1-3秒,这对我们的用例来说太长了.
题
我们可以更快地访问Google文档中的文字吗?也许直接而不是通过谷歌的云?
更新2017-02-15 目前看来它是不可能的.可以通过Chrome扩展程序执行此操作,它会解析Google文档主页并从HTML + JS中提取文本.这很难,但......可能.
如果浏览器插件是提供该功能的适当方式,那么应该可以监听 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();
Run Code Online (Sandbox Code Playgroud)
handleNewChanges只要 DOM 内容发生更改,您的函数就会被调用,并带有更改列表。这些变化相当混乱,但是
someNode.innerText来获取实际内容。通过观察更改并保留某些文档状态,您应该能够确定您关心的更改何时发生。
这似乎很适合您的用例,因为
不需要远程服务器。数据流看起来更像是这样,完全在浏览器选项卡中:
--------------- ----------
| Google Docs | <= fetch doc <= | Your |
| Document | => DOM changes => | Module |
--------------- ----------
Run Code Online (Sandbox Code Playgroud)更新与文档视觉更新同步,这感觉触发此操作是很自然的事情。
解析每个 DOM 更改所需的簿记量可能是恒定的(即,无需循环遍历文档内容)。这意味着观察增加的开销是恒定的,因此它应该扩展到任何大小的文档。
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |