我正在尝试将 dumpObject 函数添加到电子表格容器绑定脚本中。
理想情况下,它是为了查看通过触发器传递的变量。
我可以在脚本编辑器中整天运行它,但是当设置为 onEdit 事件或 onEdit Installible 触发器时,它会毫无错误地死掉。
我做了一些试验和错误 toast 消息,并确认 dumpObject 中的代码是从触发器执行的。
如果您在下面使用此代码,将 onEdit2 设置为可安装触发器,您可能会看到它。
要将其视为触发器,请取消注释 onEdit2 的第一行 //e。
我能想到的最好的事情是,来自触发器的 e 对象中的某些东西与对象的预期不完全一样吗?
这个测试应该将 maxDepth 限制为 5,所以我认为我没有达到 1000 的深度限制。
更新:问题是在触发器对象属性上调用 typeof。例如,“typeof e.user”报告以下错误:Invalid JavaScript value of type
谢谢,吉姆
function onEdit2(e) {
//e = {fish:{a:"1",b:"2"},range:SpreadsheetApp.getActiveSpreadsheet().getActiveRange(),B:"2"};
Browser.msgBox(typeof e);
Browser.msgBox("U:" + Utilities.jsonStringify(e));
e.range.setComment("Edited at: " + new Date().toTimeString());
Browser.msgBox("ShowOBJ:"+dumpObject(e, 5));
}
function dumpObject(obj, maxDepth) {
var dump = function(obj, name, depth, tab){
if (depth > maxDepth) {
return name + ' - Max depth\n';
}
if (typeof obj === 'object') {
var child = null;
var output = tab + name + '\n';
tab += '\t';
for(var item in obj){
child = obj[item];
if (typeof child === 'object') {
output += dump(child, item, depth + 1, tab);
} else {
output += tab + item + ': ' + child + '\n';
}
}
}
return output;
};
return dump(obj, '', 0, '');
}