google-docs - 在谷歌文档中获取准确的字符索引,而不管呈现的页面数量
问题描述
问题摘要:
在大型谷歌文档中查找用户插入符号位置的准确索引。
问题详情:
谷歌文档基本上是一个网页。由 html、css 和 javascript 组成。当您在 google 文档中单击时,插入符号会立即转到单击位置。
在只有 1 页的谷歌文档中,可以获得用户插入符号位置的准确索引。所需要做的就是遍历 DOM 元素,将所有文本放入一个字符串中,并找出该字符串中插入符号的索引。
但如果是较大的谷歌文档(比如一个有 20 页的文档),并非所有文本都会在文档加载时加载到文档中。只有第一页在 DOM 中完全呈现,其余内容在用户向下滚动文档时逐步呈现。
如果您快速滚动到第 10 页,则第 10 页的内容将完全呈现。但是之前页面中的文本没有呈现。因此,不可能在第 10 页中获得正确的插入符号索引。如果您通过遍历 DOM 从文档中提取所有文本并尝试查找索引,则始终是错误的(因为文档中插入符号之前的大量文本从未被渲染过)。
从我们的研发中,我们知道谷歌文档确实将文档中每个字符的索引存储在某个地方。我们知道这一点,因为如果您在第 10 页键入一个字符,则会立即进行 API 调用,并且此 API 调用中包含正确的字符索引。您可以在 chrome 浏览器的网络选项卡中看到此 API 调用。
从上面粘贴的 URL 可以看出,API URL 以单词“save”结尾。它是一个 POST api,可以在发布的 JSON 正文中看到索引。包含索引的 JSON 键名为“si”。我们不知道它存储在哪里以及如何获取它。
所需解决方案:
需要一个可以粘贴到 chrome 开发者工具控制台的 Javascript 代码片段。基本上,我快速滚动到 20 页文档的第 10 页,单击该页面上的某个位置,然后将您的代码片段粘贴到控制台中,这应该会为我们提供正确的插入符号字符索引。当然,不应该通过手动缓慢滚动页面来完全强制呈现文档。
其他详细信息: Chrome 是我们需要解决方案的唯一浏览器。其他浏览器可以忽略。我们要求可以粘贴到 chrome 开发人员工具控制台的代码片段的原因是因为我们正在构建一个 chrome 扩展,并且在控制台中运行的任何代码都可以轻松地在我们的 chrome 扩展中使用。
参考: 参考 googleDocsUtil.js 文件:https ://github.com/JensPLarsen/ChromeExtension-GoogleDocsUtil/tree/master/sample-extension 。该文件包含从 google doc 获取索引的代码。它非常好,但在单击字符之前的所有页面尚未呈现的大型文档中失败。请参阅这篇关于谷歌文档逆向工程的精彩文章:https ://features.jsomers.net/how-i-reverse-engineered-google-docs/
解决方案
推荐阅读
- javascript - 当用户键入时,NgOnChanges 会覆盖表单控件的值
- javascript - 使用请求登录回环 API 失败
- css - 向 ngClass 添加第三个条件不起作用
- html - 是否可以从网络上复制实时图表并在 Tkinter Python3 中显示?
- html - Html大纲格式
- python - 是否可以在不将其安装为鸡蛋的情况下运行金字塔应用程序?
- powershell - 如何筛选 Azure Devops REST API GET 请求的结果
- python - 从 Web 链接中提取数据到 Dataframe
- javascript - 由于上下文中未使用的属性,组件重新渲染
- oracle - Oracle Data Modeler - 如何将 DDL 更改提交回数据库?