使用对话框调用服务器端Apps脚本功能的HTML服务页面

时间:2015-06-24 09:00:56

标签: html google-apps-script client-server

我尝试使用Client-to-Server Communication on Google Scripts的模型,使用与模型不同的modal dialog

型号代码:

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function doSomething() {
  Logger.log('I was called!');
}

模型HTML:

<script>
  google.script.run.doSomething();
</script>

我的代码:

function openDialog() {
  var html = HtmlService.createHtmlOutputFromFile('Index')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  SpreadsheetApp.getUi()
      .showModalDialog(html, 'My Dialog');
}

function doSomething() {
  Logger.log('I was called!');
}

我的HTML与模型HTML相同。

然而,运行此脚本不会按预期调用Logger。我做错了吗?

1 个答案:

答案 0 :(得分:1)

这已被报告为Issue 5177,明星更新&amp;关注这个问题。

在某些情况下,我们不应期望Logger运行,例如在使用基于时间的触发器功能时,因为执行实例和调试器实例之间没有关联来记录日志。

但是,情况并非如此。我们应该有能力在这里使用记录器,但它不可靠。日志执行显示,有时

screenshot

由于这种行为,我在调试时使用BetterLog library将日志记录到电子表格中。 (您甚至可以通过$scope.cLines = [ { id: 1, cColor: "red", cName: "Line 1" }, { id: 2, cColor: "red", cName: "Line 2" }, { id: 3, cColor: "red", cName: "Line 3" } ]; $scope.cColor = 0; $scope.colors = [ {name: "red"}, {name: "blue"}, {name: "pink"}]; $scope.selectedColor1 = $scope.cLines.cColor; $scope.selectedColor2 = $scope.colors[2]; //pink $scope.selectedColor3 = $scope.colors[0]; //red $scope.selectedColorX = $scope.colors[0]; //blue 调用它来从客户端JavaScript中登录电子表格。请参阅How do I run Server-side functions using HtmlService中的详细信息。)