在Google Apps脚本中捕获针对电子表格应用模式对话框的onClose事件

alb*_*hin 3 javascript modal-dialog google-sheets google-apps-script google-spreadsheet-api

当我showModalDialog()从电子表格应用程序关闭模态对话框(打开使用)时,我想做点什么.

但是我无法在Google提供的API文档中找到此类事件的参考.我发现了如何在警报框中捕获此事件,并且通过使用这段代码,我可以捕获用户关闭警报框的方式,但我不能在模态对话框或无模式对话框中使用它.

有没有办法做到这一点?如果你这样做,请回答.

Hen*_*reu 7

这是不是可能的.你应该以一种无关紧要的方式编写脚本.例如,通过在对话框中显示一个大动作按钮,向用户明确说明他必须单击该按钮才能继续执行脚本.

但是如果你真的想要实现这一点,我猜你可以使用一个HtmlService对话框,对后端进行定期异步调用,每个调用在退出之前等待下一个调用,然后如果"下一个"调用没有及时到达,它可以假设对话框已关闭并执行您的关闭程序而不是简单地退出.


Dim*_*gns 5

这是一个替代解决方案。您可以在 HTML 中使用 google 托管的 jquery(由 GAS 提供)来跟踪页面关闭时的卸载事件。这是一些示例代码:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <!-- page content -->
  </body>

  <!-- Minified google hosted jquery (see https://developers.google.com/speed/libraries/)-->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

  <!-- And here's where the magic happens -->
  <script type="text/javascript">
    $(document).ready( e => {
      console.log('-- DOM ready --');

      /** Add jquery unload listener */
      $(window).on('unload', e => {
        console.log("Invoked just before unload");
        // do pre-unload stuff
      });
    });
  </script>
</html>
Run Code Online (Sandbox Code Playgroud)