我创建了一个侧边栏,以便有一个用于搜索我的Google表单的基本UI。我正在完全关注this tutorial以确保第一步有效,但事实并非如此!我甚至拿出了userObject部分来简化它(老实说,因为我不知道那部分是做什么的)。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
function updateButton(email, button) {
button.value = 'Clicked by ' + email;
}
</script>
</head>
<body>
<input type="button" value="Not Clicked"
onclick="google.script.run
.withSuccessHandler(updateButton)
//.withUserObject(this)
.testMe()" />
<input type="button" value="Not Clicked"
onclick="google.script.run
.withSuccessHandler(updateButton)
//.withUserObject(this)
.testMe()" />
</body>
</html>
它调用此函数:
function testMe() {
Logger.log("Test log.");
return ContentService.createTextOutput("Jackpot!");
}
如果重要,HTML会通过onOpen在侧栏中运行,如下所示:
function showGradingSidebar() {
var html = HtmlService.createHtmlOutputFromFile('testSidebar')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setTitle('Testing Module')
.setWidth(300);
SpreadsheetApp.getUi()
.showSidebar(html);
}
当我点击按钮时,它什么也没做(我可以看到)。通过更改各个方面,我可以将它传递给Logger.log()一个简单的消息,但即使这样,如果我改变HTML方面也无法可靠地工作。
我正在阅读需要清理函数返回内容的安全限制,但HtmlService.createHtmlOutput()和ContentService.createTextOutput()都不成功。请指教。
更新:感谢@Bryan P,我得到了它的工作。 testMe()就是:
return "Jackpot";
... HTML页面如下所示:
[html, head, etc.]<body>
<input type="button" value="Ready"
onclick="google.script.run
.withSuccessHandler(updateButton)
.withUserObject(this)
.testMe()" --->
<br><div id="output">Output goes here: </div>
<br><div id="papa">Papa goes here: </div>
<br><p></p>
<script>
function updateButton(result) {
var div = document.getElementById('output')
div.innerHTML = 'It finally works!' + result;
}
</script>
</body>
</html>
我不知道它有多大帮助,但在阅读this SO post之后,我确实将脚本标签移到了身体的底部,fwiw。
答案 0 :(得分:0)
在Chrome中,如果右键单击侧边栏区域&gt;&gt;检查&gt;&gt;在控制台中,它应该显示一条消息,指出在点击其中一个按钮后没有有效的返回类型。
.createTextOutput(content)
返回TextOutput类型(与纯文本类型不同)
仅在您部署了网络应用网址和一些外部服务调用该网址时使用。它也只有handled with doGet()。
您是否只尝试了return "Jackpot";
?
.withUserObject(this)
- this
指的是按钮元素,整个方法将其传递给successHandler()
。所以你可以考虑保留它。否则,您必须以另一种方式从successHandler中引用该按钮:
function updateButton(email) {
document.getElementById('myButton').value = 'Clicked by ' + email;
}
...这需要您在按钮中添加ID属性。
你总是可以这样做:
function updateButton(email, button) {
console.log('Success hit');
button.value = 'Clicked by ' + email;
}
...检查是否甚至在Chrome开发者控制台中调用了successHandler。