如何将页面(模式对话框)与其同级页面(侧边栏)进行通信?

2024-02-05

我正在将我的脚本转换为附加组件。其中一个需求是配置模板,因此我编写了一个启动字段选择器的侧边栏。由于侧边栏没有足够的空间容纳选择器,因此我必须从侧边栏创建的模式对话框中启动它,方法是在服务器端调用以下代码:

var html = HtmlService.createHtmlOutputFromFile('TemplatePicker.html')
  .setWidth(600).setHeight(425);
SpreadsheetApp.getUi().showModalDialog(html, 'Select the file with the template');

我的问题是,一旦用户选择文件,当我拥有所选文件的 id 时,我无法将该 id 传递到侧边栏。我尝试调用someJSFunctionOfSidebar(id) and parent.someJSFunctionOfSidebar(id),但它不起作用,所以我最终结束了将值传递到服务器端并从那里重新加载侧边栏,但它非常慢并且产生的效果很难看。

我的问题是:

有没有办法从使用创建的模式对话框在客户端级别传递值SpreadsheetApp.getUi().showModalDialog给它的父级?也许它并不是真正的父级,这就是它不起作用的原因。


也许它并不是真正的父级,这就是它不起作用的原因。

是的 - 这里实际上并没有 DOM 父/子关系。侧边栏和模式对话框都是从服务器端脚本启动的,并且是独立的。不过,它们都可以与服务器通信,因此您可以使用存储转发技术将结果从选择器获取到侧边栏。

基本思想:

  • 一旦请求启动选择器,侧边栏就会开始轮询服务器以获取选择器的结果。
  • 选择器的结果将发送到服务器,使用google.script.run.
  • 服务器将临时存储结果 - 这可能像全局变量一样简单,具体取决于您的情况。
  • 一旦有结果,下一次民意调查将检索它。

看一下如何从附加组件轮询 Google 文档 https://stackoverflow.com/questions/24773177/how-to-poll-a-google-doc-from-an-add-on/24773178#24773178了解轮询器的基本思想。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将页面(模式对话框)与其同级页面(侧边栏)进行通信? 的相关文章