Javascript 使用字符串定义函数,但不执行它(无eval等…更像是include、require)
我想请你帮忙,因为我已经穷途末路了 我正在使用GoogleSheet脚本编辑器,我正在尝试创建一个带有自定义函数的自定义菜单。然而,我想实现它的图书馆,可以连接到其他用户的其他工作表,它将自动更新时,我做了一个新的版本。当我想将其定义为菜单中的“自定义函数”时,问题就开始了Javascript 使用字符串定义函数,但不执行它(无eval等…更像是include、require),javascript,google-apps-script,Javascript,Google Apps Script,我想请你帮忙,因为我已经穷途末路了 我正在使用GoogleSheet脚本编辑器,我正在尝试创建一个带有自定义函数的自定义菜单。然而,我想实现它的图书馆,可以连接到其他用户的其他工作表,它将自动更新时,我做了一个新的版本。当我想将其定义为菜单中的“自定义函数”时,问题就开始了 var ui = SpreadsheetApp.getUi(); ui.createMenu('Custom Menu') .addSubMenu( ui.createMenu('clip
var ui = SpreadsheetApp.getUi();
ui.createMenu('Custom Menu')
.addSubMenu(
ui.createMenu('clipboard')
.addItem('copy', 'menuItem1')
.addItem('paste', 'menuItem2')
)
.addToUi();
function menuItem1(){
bla,bla,bla
}
function menuItem2(){
bla,bla,bla
}
在菜单中,我只能声明函数名,但这意味着每当菜单中有新函数时,用户必须手动将其放入
ui.createMenu('Custom Menu')
.addSubMenu(
ui.createMenu('clipboard')
.addItem('copy', 'menuItem1')
.addItem('paste', 'menuItem2')
)
.addSeparator()
.addSubMenu(
ui.createMenu('merge')
.addItem('merge', 'menuItem3')
.addItem('unmerge', 'menuItem4')
)
.addToUi();
function menuItem1(){
bla,bla,bla
}
function menuItem2(){
bla,bla,bla
}
function menuItem3(){
bla,bla,bla
}
function menuItem4(){
bla,bla,bla
}
我不想那样。我想创建一个函数列表,然后在更新我的库时自动将其包含到文件中…但我不能将其包含在google脚本编辑器中。当我使用库时,我必须使用库标记名称
ml=MyLibrary然后是ml.menuItem1。
我只能用
menuItem1
而非ml.menuItem1
我正在寻找一种方法以某种方式包含这个文件,但我能想到的最好方法是从字符串定义函数,但不执行它
function listOfFunctions(){
var functionString1 = "function menuItem1(){ blablabla }";
var functionString2 = "function menuItem1(){ blablabla }";
return functionString1 + functionString2;
}
然后以某种方式将其解析为:
function menuItem1(){ blablabla };
然后在我想要的时候执行它
menuItem1()
或menuItem2()
如果我通过eval()运行这个字符串,函数将被执行,我只想定义它。我可以稍后使用触发器执行它
那么你想得到什么帮助了吗?你真的应该删除所有与谷歌表单无关的东西等等,并缩小问题的范围。如果用户更改了库的版本号,那么您在新发布的版本中所做的任何更改都将被使用。如果在新发布的版本中添加了菜单项,则它们将显示出来。如果希望在不发布新版本和用户不更改版本号的情况下显示新菜单项,则需要从外部源(如电子表格、文本文件或数据库)获取菜单项。但是用户需要授权访问外部url。您的用户都在同一个域中吗?与贵公司的GSuite帐户类似?此处的代码使用电子表格服务/UI功能作为全局变量。那是个糟糕的主意。每当任何新脚本执行开始时,这些都会执行。解决了!!!我返回完整的函数定义为string
function returnFunctionsString(){var string=“function test(){blablabla}”}
,然后通过eval(returnFunctionsString())
之后,我可以随时调用它…它的工作原理类似于include或require…我可以稍后调用这些函数…我发誓我昨天尝试了它,当我将returnfunctionString通过eval()放入时,我也立即执行了这个函数。感谢大家的回复,它也帮了我很多,并在其他地方使用:)