javascript - 如何保持 Google Drive 侧边栏可用的持久服务器端数据?

标签 javascript google-apps-script

我想从 Google Apps 脚本代码创建的侧边栏 HTML 文档访问其持久服务器端实例中的对象。

我在 GAS 方面经验丰富,但在网页设计方面经验较少。我的总体目标是创建一个交互式侧边栏,代表 Google 文档的内部结构。

现在它显示了文档运行时的结构,但我想实现一些功能,例如突出显示或单击侧边栏中的元素以突出显示 Google 文档中的相应元素,和/或反之亦然。

我想通过访问 HTML 元素的 ID 与表示 Google 文档元素的 GAS 对象之间的对应关系来实现此目的。首次运行脚本时构建该对应关系很容易,但我不知道如何保留它以便 HTML 代码可以访问它。

我知道您可以从 HTML 调用 GAS 函数,但它们不会存在于同一个执行实例中,因此它们无法访问对应关系。

我知道您可以使用模板将数据传递到 HTML 文档,但这需要序列化 ​​Document 对象或 ParagraphElement 对象,或者其他任何东西,我如果可能的话想避免打交道。我还希望这些对象保持与实际 Google 文档的连接,但据我了解,它们不会。

我知道您可以访问缓存和/或文档属性,但这两者都还涉及序列化 Document 对象。

我知道你可以使用触发器来调用 GAS 函数,例如编辑文档时,然后访问文档的 UI,但是(同样,据我了解)这将需要在编辑文档时重写整个侧边栏 HTML,我认为这会使其看起来很糟糕且烦人。

我怎样才能做到这一点?我的任何假设都是错误的吗?有这类事情的好例子吗?

最佳答案

我也做过类似的事情。我想跟踪文档的各个部分,并能够从侧边栏更改它们的格式。即使文档发生变化,我也希望它能够工作。

我的解决方案是在文档中我想要突出显示的部分周围嵌入零宽度(非打印)unicode 字符。然后我可以使用模式搜索来查找我感兴趣的部分并更改字体、格式等。

我使用的字符是:

var ZERO_WIDTH_SPACE = '\u200B';
var ZERO_WIDTH_NON_JOINER = '\u200C';
var ZERO_WIDTH_JOINER = '\u200D';
var ZERO_WIDTH_NBSP = '\uFEFF';

关于javascript - 如何保持 Google Drive 侧边栏可用的持久服务器端数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56589031/

相关文章:

javascript - 在 JavaScript 中将所选元素置于数字选择器小部件内的中心

javascript - 多个变量在 Javascript 中不起作用

javascript - 为什么我的单选按钮响应无法响应我的 Google 电子表格?

javascript - Selenium WebDriverJS,无法为 Chrome 构建 webdriver

javascript - React 内联样式不会影响我的自定义组件

google-apps-script - 在另一个应用程序脚本中调用应用程序脚本

javascript - Google 表单自定义字段验证

google-apps-script - 如何复制具有 protected 范围的工作表?

javascript - 如何在 Web 界面中授权应用程序脚本?

javascript - 如何解释三星手机[chrome] iframe下应用程序的性能提升?