Google apps script 如何与父页面(侧边栏)通信?

Google apps script 如何与父页面(侧边栏)通信?,google-apps-script,google-sheets,web-applications,google-docs,Google Apps Script,Google Sheets,Web Applications,Google Docs,我正在把我的一个脚本转换成一个附加组件。其中一个需求是配置一个模板,所以我已经编写了一个启动字段选择器的边栏。由于侧边栏没有足够的空间容纳选择器,我必须通过在服务器端调用以下代码,从侧边栏创建的模式对话框启动它: var html = HtmlService.createHtmlOutputFromFile('TemplatePicker.html') .setWidth(600).setHeight(425); SpreadsheetApp.getUi().showModalDialog(

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

var html = HtmlService.createHtmlOutputFromFile('TemplatePicker.html')
  .setWidth(600).setHeight(425);
SpreadsheetApp.getUi().showModalDialog(html, 'Select the file with the template');
我的问题是,一旦用户选择了文件,当我拥有所选文件的id时,我就无法将该id传递到侧边栏。我尝试调用
someJSFunctionOfSidebar(id)
parent.someJSFunctionOfSidebar(id)
,但没有成功,因此我最终结束了将值传递到服务器端并从服务器端重新加载侧边栏的过程,但速度非常慢,结果很糟糕

我的问题是:

是否有方法将使用
SpreadsheetApp.getUi().showModalDialog
创建的模式对话框中的客户端级别的值传递给其父级?也许它不是它的父母,这就是它不起作用的原因

也许它不是它的父母,这就是它不起作用的原因

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

基本思想:

  • 边栏将在请求启动选择器时立即开始轮询服务器以获取选择器的结果
  • 选择器的结果将使用
    google.script.run
    发送到服务器
  • 服务器将临时存储结果-这可能像全局变量一样简单,具体取决于您的情况
  • 一旦有结果,下一次投票将检索它
看看民意测验的基本概念


我认为没有办法做到这一点。我相信侧边栏和模式就像两个完全独立的应用程序,或者更像两个独立的会话。即使是mailchimp邮件合并插件也必须在选择文件选择器后重新加载侧栏。如果当前用户同时运行这两个元素,则可以使用@AlexanderIvanov,我知道,事实上我这样做是为了在它们之间共享数据,但这并不能解决在不重新加载侧栏的情况下通信UI的问题。相关:哇,这一个很可能成为一个热门:-)所以让我第一个投票吧!是的,考虑到这些限制,我认为这是应该走的道路,谢谢@Mogsdad,我甚至没有尝试,因为最简单的方法(重新加载侧边栏,通过用户属性进行通信)对我的客户端来说已经足够了。也许它不是它的父级,这就是它不工作的原因。是的,但他们都有相同的父母(他们是兄弟姐妹),直接通过父母窗口(
window.top
)进行沟通。@themaster现在有可能,而不是2014年——2019年的答案将受到当前用户的欢迎。