更新:这是完全可能的。我只是在异步方法完成之前关闭主机窗口。我的解释是,即使UI被关闭,运行上下文也会持续存在。不。
我想确认是否可以通过google.script.run从HTMLService加载的HTML模板中的JavaScript函数中调用电子表格容器绑定项目中的Apps脚本功能。我最初的发现表明“不”(见下文),但我可能会遗漏一些东西。
google.script.run调用,当从onclick处理程序调用的JS函数中调用时,始终路由到错误处理函数,并出现以下错误代码: NetworkError:由于HTTP 0导致连接失败< /强>
如果我直接从按钮的onclick处理程序调用google.script.run代码,它就会运行。我希望能够在一个函数中使用它,这样我就可以建立一组数据来传递给我正在计划实现的实际方法。
我查看了使用Google登录的this bug,但在这个简单的测试中,我没有引用库。
以下是更多细节: - 新版表格 - 使用最简单的代码创建的新电子表格和AS项目,以重新创建问题。
我在容器绑定项目的应用程序脚本文件中有以下代码:
function onOpen()
{
var testMenu = SpreadsheetApp.getUi()
.createMenu('Custom Menu');
testMenu.addItem('Show UI in sidebar', 'showSidebar');
testMenu.addToUi();
};
function showSidebar(){
var html = HtmlService.createTemplateFromFile('simpleDialog');
SpreadsheetApp.getUi().showSidebar(html.evaluate());
}
function doWorkInAppsScriptFile()
{
Logger.log("doWorkInAppsScriptFile called.");
}
在“SimpleDialog”html文件中,也是在Apps脚本项目中,我有以下测试代码:
<h2>google script run test</h2>
<div style="width:98%;margin:10px">
<div style="width:98%;margin:10px;padding:10px;text-align:center">
<input type="button" id="saveButton" onclick="onSave()" value="Save" style="background:DarkGreen;color:White;font-weight:bold;margin:10px"/>
</div>
</div>
<script type="text/javascript">
function onSave(){
google.script.run.withFailureHandler(onFailure).doWorkInAppsScriptFile();
//Moving the following line to an onSuccess handler, and calling .withSuccessHandler,
// allows the code to close the window appropriately. Leaving this in causes the error discussed in this q.
google.script.host.close();
}
function onFailure(error)
{
alert("onFailure: " + error);
}
</script>
答案 0 :(得分:2)
这里的罪魁祸首是onSave()
函数中的这一行:
google.script.host.close();
删除/评论此行,脚本运行正常。您看到的错误是因为您关闭了该行的侧栏,切断了与服务器端脚本的连接。
如果确实需要在onSave()
执行完毕后关闭侧边栏,请将该行移至成功处理程序回调:
function onSave(){
google.script.run
.withSuccessHandler(onSuccess)
.withFailureHandler(onFailure)
.doWorkInAppsScriptFile();
}
function onSuccess(data)
{
// do something with returned data
// close the sidebar
google.script.host.close();
}
function onFailure(error)
{
alert("onFailure: " + error);
}
答案 1 :(得分:-1)
您可以使用:{/ p>而不是HtmlService.createTemplateFromFile
HtmlService.createHtmlOutputFromFile('simpleDialog');
您可以在此处找到有关此功能的更多信息https://developers.google.com/apps-script/guides/html/