我正试图在我的工作表中创建一个html框,其中包含一个应该运行函数的按钮。
我简化了代码以隔离问题,但我所做的似乎有问题。
使用下面的代码,创建了html输出,按钮会做出反应,因为警报有效,但code.gs中的函数不会运行。执行显示htmlBox((已完成,但没有returnYes((的痕迹
你能帮我吗?
代码.gs
function htmlBox(){
var htmlOutput = HtmlService
.createHtmlOutputFromFile("box")
.setWidth(200)
.setHeight(50);
SpreadsheetApp.getUi().showModalDialog(htmlOutput, "Try to make work this button");
}
function returnYes(){
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test");
var value = "yes!";
ws.getRange(1, 1).setValue(value);
}
box.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<button id="btn">Run It!</button>
</div>
<script>
document.getElementById("btn").addEventListener("click",buttonClicked);
function buttonClicked() {
alert("Button clicked");
google.script.run.returnYes();
}
</script>
</body>
</html>
编辑:以下代码无法解决中描述的问题
问题是Code.gs.中缺少doGet函数
通过添加它,现在就可以工作了。
代码.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile("box");
function htmlBox(){
var htmlOutput = HtmlService
.createHtmlOutputFromFile("box")
.setWidth(200)
.setHeight(50);
SpreadsheetApp.getUi().showModalDialog(htmlOutput, "Try to make work this button");
}
function returnYes(){
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test");
var value = "yes!";
ws.getRange(1, 1).setValue(value);
}
向@Baby_Boy咨询解决方案。
有任何消息。doGet
函数不能解决上述问题。
今天,我尝试运行buttonClicked()
,但它不起作用,尽管有doGet
函数。不同的是,我在家里运行了这个函数。当它以前工作时,我正在工作,并连接到我雇主的网络。当我试图从我的私人网络启动该功能时,它似乎没有运行。因此,正如@Iamblichus所建议的,这个问题可能仅限于我的帐户或域。
谢谢@Iamblichus对你的推断。我不知道哪种限制可以阻止我在同一个Apps Scripts项目中创建工作html和js文件,我也不知道这种限制的目标是什么,但我至少知道什么不起作用。