Javascript : 错误位置评估 JS 函数('...我的代码作为字符串')



我们有一些用户定义的字段来定义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;
}
}
}

相关内容

  • 没有找到相关文章

最新更新