gpt4 book ai didi

javascript - 使用 google.script.run 从 html 调用库函数

转载 作者:行者123 更新时间:2023-11-30 20:44:08 28 4
gpt4 key购买 nike

我使用 Google App Script 实现库,但使用 google.script.run 从库调用函数时遇到一些困难。

这是我的库的代码:

代码.gs

function ShowSideBar() {
var html = HtmlService.createTemplateFromFile('Index_librairie').evaluate()
.setTitle('Console de gestion')
.setWidth(300);
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showSidebar(html);
}

function execution_appeler_par_html(){
Logger.log("execution_appeler_par_html");

}

Index_librairie.html

<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
google.script.run.withSuccessHandler(work_off).execution_appeler_par_html();
function work_off(e){
alert(e);
}
</script>
</head>
<body>
test de ouf
</body>
</html>

这是我使用图书馆的电子表格:代码.gs

function onopen() {
lbrairietestedouard.ShowSideBar();
}

Google.script.run 不会重新调整 execution_appeler_par_html() 函数。我应该使用 libraryname.execution_appeler_par_html() 但这种语法在 google.script.run 的配置中不起作用

最佳答案

google.script.run 似乎无法查看对象内部或自执行的匿名函数。在我的例子中,将任何代码放入对象或 IIFE 会导致在控制台中抛出“不是函数”类型的错误。

您可以通过声明一个函数来解决这个问题,该函数将调用库和对象中的嵌套方法。

.GS文件

 function callLibraryFunction(func, args){

var arr = func.split(".");

var libName = arr[0];
var libFunc = arr[1];

args = args || [];

return this[libName][libFunc].apply(this, args);

}

在 JavaScript 中,每个对象的行为都像键值对的关联数组,包括“this”在这种情况下指向的全局对象。虽然 'libName' 和 'libFunc' 都是 String 类型,但我们仍然可以使用上述语法在全局对象内部引用它们。 apply() 只是调用“this”上的函数,使结果在全局范围内可用。

以下是从客户端调用库函数的方式:

 google.script.run.callLibraryFunction("Library.libraryFunction", [5, 3]);

我并不声称这个解决方案是我自己的 - 这是我不久前在 Bruce McPherson 的网站上看到的。您可以想出其他可能更适合您的情况的临时解决方案,但我认为这个是最通用的。

关于javascript - 使用 google.script.run 从 html 调用库函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48928932/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com