HTML 服务不会显示返回值



我创建了一个侧边栏,有一个基本的用户界面来搜索我的谷歌表格。我完全按照本教程进行操作,以确保第一步有效,只是它没有!我什至删除了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。

最新更新