我们有一些用户定义的字段来定义javascript函数,并希望在抛出错误时向用户显示位置(行,列(。例如:
userFunc = new Function('context', '{ let a = 0; n context.missingFunction(); return 2; }');
评估用户 Func 时
userFunc({});
抛出异常,如下所示:
context.missingMeethod is not a function
是否有一个库可以在所有现代浏览器中检索错误的位置(例如:第 2 行,第 12 列(
error-stack-parser library(来自 StacktraceJS(不会检索信息。在Chrome中,堆栈跟踪看起来像(位置是匿名的(:
TypeError: context.missingMeethod is not a function
at eval (eval at <anonymous> (http://localhost:3000/icCube/reporting/static/js/main.chunk.js:28541:66), <anonymous>:2:12)
这似乎至少在Chrome,Firefox和Safari中是可能的。我不确定这概括得如何,但它可能会给你一些工作!
在铬中:
getErrorPosition = (userFunc) => {
try {
userFunc({});
return null;
} catch (error) {
const relevantLine = error.stack.split('n')[1];
const regex = /<anonymous>:(d+):(d+))/g;
const match = regex.exec(relevantLine);
if (match) {
return {
line: parseInt(match[1], 10),
column: parseInt(match[2], 10)
};
} else {
return null;
}
}
}
在 Safari 中:
getErrorPosition = (userFunc) => {
try {
userFunc({});
return null;
} catch (error) {
return {
line: error.line,
column: error.column,
};
}
}
在火狐中:
getErrorPosition = (userFunc) => {
try {
userFunc({});
return null;
} catch (error) {
const relevantLine = error.stack.split('n')[0];
const regex = /Function:(d+):(d+)/g;
const match = regex.exec(relevantLine);
if (match) {
return {
line: parseInt(match[1], 10),
column: parseInt(match[2], 10)
};
} else {
return null;
}
}
}