我尝试使用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。我做错了吗?
答案 0 :(得分:1)
这已被报告为Issue 5177,明星更新&amp;关注这个问题。
在某些情况下,我们不应期望Logger运行,例如在使用基于时间的触发器功能时,因为执行实例和调试器实例之间没有关联来记录日志。
但是,情况并非如此。我们应该有能力在这里使用记录器,但它不可靠。日志执行显示,有时:
由于这种行为,我在调试时使用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中的详细信息。)