我有两个 Google Apps 脚本项目,都是电子表格类型。
让我们调用一个Server 和另一个Client。
我想从Server 公开一些函数,这样我就可以从Client 调用它们。
图书馆似乎很适合这个。
不幸的是,当我使用 Resources --> Libraries... 菜单选项将 Server 库添加到 Client 时,出现问题。
请注意,尽管Server 库已添加到Client,但我实际上从未使用过任何Server 库函数。 (事实上 Server Code.gs 是完全空白的。)
服务器代码.gs
//nothing, totally blank, these are test projects created find out what is wrong
客户端代码.gs
//This is our entry point
//It instantiates the Sidebar from Sidebar.html
function test()
{
SpreadsheetApp.getUi().showSidebar(HtmlService.createHtmlOutputFromFile('Sidebar')
.setSandboxMode(HtmlService.SandboxMode.IFRAME));
}
function testReturn()
{
Logger.log("doTest() called");
return 1;
}
客户端 Sidebar.html
<script>
function yay(d)
{
alert('yay: ' + d);
}
function boo(d)
{
alert('boo: ' + d);
}
google.script.run.withFailureHandler(boo).withSuccessHandler(yay).testReturn();
</script>
应该发生什么:
我们调用Client.test()。
这会从 Sidebar.html 打开一个边栏
边栏运行:
google.script.run.withFailureHandler(boo).withSuccessHandler(yay).testReturn();
这应该从 Client Code.gs
调用testReturn()
当
testReturn()
完成(或未完成)...应调用
yay(d)
或boo(d)
。
很简单...
因此,当我们没有附加NO 库时,将调用yay(d)
! (在这种情况下使用 d = 1
)
但是当我们确实附加了一个库时,boo(d)
被调用
d = ScriptError: We're sorry, a server error occurred. Please wait a bit and try again.
另外,我相信 testReturn()
永远不会运行,因为它没有出现在日志中。
我做错了什么?这是 Google 方面的错误吗?
我公开了测试项目:
总而言之,我不明白为什么简单地添加共享库会破坏 google.script.run
.... 功能。特别是因为图书馆是空白的。
最佳答案
tl;dr 您的“库”是包含电子表格的脚本。为你的库使用一个独立的脚本,你会没事的。
我使用您的示例代码创建了一个脚本和库,并且运行良好。我抓取了您共享文件的副本,它们都是电子表格,并重现了这个错误:
We're sorry, a server error occurred. Please wait a bit and try again.
我尝试了几个著名的公共(public)图书馆,SheetConverter和 BetterLog .如果我从项目中删除了你的库,一切都很好。
观察:问题不是库的存在,而是的存在您的图书馆。
与我的手卷副本和两个公共(public)图书馆相比,您的图书馆有什么特别之处?你的是包含电子表格的。其他三个是独立的。
结论:不要那样做。对于库,请使用独立脚本。
我还没有在任何当前文档中找到详细说明。碰巧的是,我所有的库都是独立脚本,所以我以前从未遇到过这个限制,也不能说这是新的东西还是旧文档或示例表达了独立要求。
关于您的其他问题/问题...
- >
And when
testReturn()
finishes (or doesn't)...WRT “或不”部分...当服务器函数
抛出
异常时调用failureHandler
。您观察到的错误消息就是这样的一个异常(exception)。如果您有意要调用一个failureHandler
,您的服务器代码应该throw
。 - >
Also, I believe
testReturn()
is never run because it does not show up in the logs.触发脚本并不总是可以访问编辑器的日志查看器,因此您应该考虑使用 BetterLog 库将日志写入电子表格。它甚至适用于没有附加调试器的触发器函数和 Web 应用程序。 (只是说,因为缺少日志不能可靠地暗示从客户端代码调用的函数没有运行。)
关于google-apps-script - 服务器错误,使用共享库时 google.script.run 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31352328/