这是一个网络应用程序,使用 Google Apps 脚本,作为访问该应用程序的用户运行。
我们有一些用户的自定义数据和代码。
该自定义信息位于开发人员的 Google 云端硬盘中的文本文件中,特定用户只有查看权限。
该文本文件的内容可能类似于下面的伪代码:
var oConfig = {
some : "OK",
getinfo : function (s) {
return this.some + s;
}
}
为了将自定义数据/代码放入应用程序,我们可以使用 eval(),如下所示:
var rawjs = DriveApp.getFileById(jsid).getBlob().getDataAsString();
eval(rawjs);
Logger.log(oConfig.getinfo("?")); // OK?
我的问题是:
有没有比 eval() 更好的方法来实现这个目标?
考虑到文本文件只能由开发人员编辑,在这种情况下 eval() 是否足够安全?
谢谢,福斯托
最佳答案
嗯,它看起来足够安全。但是使用 eval 有其他问题,比如难以调试您的代码,并且可能还有一些其他问题。
如果您在自己的代码中生成此类自定义数据,我想此类自定义的种类繁多。如果是这样,我会将代码保留在您的脚本中,并在 Drive 中仅保存数据并使用指示符(如函数变体名称)来说明如何在脚本中重建配置对象。例如:
function buildConfig(data) {
var config = JSON.parse(data); //only data, no code
config.getInfo = this[config.getInfo]; //hook code safely
return config;
}
function customInfo1(s) { return this.some + s; }
function customInfo2(s) { return s + this.some; }
function testSetup() {
//var userData = DriveApp.getFileById(jsid).getBlob().getDataAsString();
var userData = '{"some":"OK", "getInfo":"customInfo1"}'; //just for easier testing
var config = buildConfig(userdata); //no eval
//let's test it
Logger.log(config.getInfo('test'));
}
关于javascript - 在这种情况下有没有比 eval() 更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26846786/