首页 > 解决方案 > 在谷歌文档中获取准确的字符索引,而不管呈现的页面数量

问题描述

问题摘要:

在大型谷歌文档中查找用户插入符号位置的准确索引。

问题详情:

谷歌文档基本上是一个网页。由 html、css 和 javascript 组成。当您在 google 文档中单击时,插入符号会立即转到单击位置。

在只有 1 页的谷歌文档中,可以获得用户插入符号位置的准确索引。所需要做的就是遍历 DOM 元素,将所有文本放入一个字符串中,并找出该字符串中插入符号的索引。

但如果是较大的谷歌文档(比如一个有 20 页的文档),并非所有文本都会在文档加载时加载到文档中。只有第一页在 DOM 中完全呈现,其余内容在用户向下滚动文档时逐步呈现。

如果您快速滚动到第 10 页,则第 10 页的内容将完全呈现。但是之前页面中的文本没有呈现。因此,不可能在第 10 页中获得正确的插入符号索引。如果您通过遍历 DOM 从文档中提取所有文本并尝试查找索引,则始终是错误的(因为文档中插入符号之前的大量文本从未被渲染过)。

从我们的研发中,我们知道谷歌文档确实将文档中每个字符的索引存储在某个地方。我们知道这一点,因为如果您在第 10 页键入一个字符,则会立即进行 API 调用,并且此 API 调用中包含正确的字符索引。您可以在 chrome 浏览器的网络选项卡中看到此 API 调用。

The API URL is like this: https://docs.google.com/document/d/1rt2aOa9_nAWGAQQGZWWzEPxnVihWpC0Ejv1ghh69KM9o4/save?id=1rt2aOa9_nAWGAQQGZWWzEPxnVihWpC0Ejv1x_aWKM9o&sid=7bb6f7c06b7ab1ef&vc=1&c=1&w=1&flr=0&smv=8&token=AC4w5VhH-UTBlVwVdFQIbjS77y8mchf4Zw%3A1596552882670&includes_info_params=true

从上面粘贴的 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/

标签: google-docsgoogle-docs-api

解决方案


推荐阅读