加载草稿工作onload但不是由按钮触发

时间:2018-01-13 10:22:03

标签: google-apps-script

我打算从用户的草稿邮件开始,编写一个简单的Google Apps Script邮件合并应用程序作为绑定脚本。我打开一个带有下拉列表的侧边栏来选择草稿。当我获取草稿onLoad时,它工作正常,但当我用按钮触发提取时,侧边栏被清除,控制台中没有显示任何错误。

我将代码剥离到最低限度以显示问题:

<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
</head>

<body>
  <div class="sidebar">
    <form>
      <div class="block">
      <div class="inline form-group">
        <label for="draft">Choose</label>
        <select id="draft">
          <option disabled selected>One moment please ...</option>
        </select>
      </div>
      </div>
      <div class="block" id="button-bar">
        <button id="reload">reload</button>
      </div>
    </form>
  </div>

  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
  </script>
  <script>
    $(function() {
      getDrafts();
      $('#reload').click(getDrafts);
    });

    function getDrafts() {
      google.script.run
        .withSuccessHandler(loadDrafts)
        .withFailureHandler(showError)
        .getDraftMessages();
    }

    function loadDrafts(drafts) {
      $('#draft').find('option').remove();
      for (var i = 0; i < drafts.length; i++) {
        $('#draft').append('<option value="' + drafts[i].id + '">' + drafts[i].subject + '</option>');
      }
    }

    function showError(msg, element) {
      var div = $('<div id="error" class="error">' + msg + '</div>');
      $(element).after(div);
    }
  </script>
</body>

</html>

后端javascript(.gs文件)是:

function onOpen() {
  var ss = SpreadsheetApp.getActive();
  var menu = [{
    name: 'Mailmerge tests',
    functionName: 'mailMerge'
  }, ];
  ss.addMenu('MM experiment', menu);
}

mailMerge = function() {
  var html = HtmlService.createHtmlOutputFromFile('MailMergeUI').setTitle('Mail merge');
  SpreadsheetApp.getUi().showSidebar(html);
}

function getDraftMessages() {
  try {
    draftMessages = GmailApp.getDraftMessages();
    drafts = [];
    for (var i = 0; i < draftMessages.length; i++) {
      drafts.push({
        'id': draftMessages[i].getId(),
        'subject': draftMessages[i].getSubject()
      })
    }
  } catch (err) {
    throw (err);
  }
  Logger.log("Returning: ");
  Logger.log(drafts);
  return drafts;
}

Logger记录正确的草稿,但边栏中的.withSuccessHandler(loadDrafts)不会被执行;相反,侧边栏冻结了。

在Chrome开发者工具中,我找不到调试它们的脚本。

1 个答案:

答案 0 :(得分:1)

查看html,我认为这是因为按钮提交了表单。如果您对客户端js进行此建议编辑,我希望它能解决它。

$(function() {
  $('#reload').click(getDrafts).click();
});

function getDrafts(e) {
  e.preventDefault();
  google.script.run
    .withSuccessHandler(loadDrafts)
    .withFailureHandler(showError)
    .getDraftMessages();
}