我创建了一个侧边栏,有一个基本的用户界面来搜索我的谷歌表格。我完全按照本教程进行操作,以确保第一步有效,只是它没有!我什至删除了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>
我不知道它有多大帮助,但在阅读了这篇 SO 帖子后,我确实将脚本标签向下移动到了正文的底部,fwiw。
在 Chrome 中,如果您在控制台中右键单击侧边栏区域>>检查>>,它应该会显示一条消息,指出在单击其中一个按钮后没有有效的返回类型。
.createTextOutput(content)
返回文本输出类型(与纯文本类型不同)
仅当部署了 Web 应用 URL 和某些外部服务调用该 URL 时,才使用它。它也只能用 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。