我打算从用户的草稿邮件开始,编写一个简单的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开发者工具中,我找不到调试它们的脚本。
答案 0 :(得分:1)
查看html,我认为这是因为按钮提交了表单。如果您对客户端js进行此建议编辑,我希望它能解决它。
$(function() {
$('#reload').click(getDrafts).click();
});
function getDrafts(e) {
e.preventDefault();
google.script.run
.withSuccessHandler(loadDrafts)
.withFailureHandler(showError)
.getDraftMessages();
}