HTMLService不会显示返回值

时间:2016-02-19 09:42:23

标签: google-apps-script

我创建了一个侧边栏,以便有一个用于搜索我的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。

1 个答案:

答案 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。