在我的应用程序中,我解析了一些用户输入,然后使用(new Function(...))()
将其作为Javascipt代码运行。如果输入不正确,则会引发异常。我需要的是一种获取行号的方法,该行发生在已提供给new Function()
的已分析字符串中。有可能吗?
答案 0 :(得分:1)
为此,我们需要编写逻辑以从错误对象中捕获堆栈跟踪,并找出anonymous
函数确切指示错误已引发的位置。
在Chrome中引发错误的行号表示为<anonymous>:5:17
,而在Firefox中是Function:5:17
try{
(new Function(`var hello = 10;
const world = 20;
let foo = 'bar';
xyz; //simulating error here
`))();
}catch(err){
let line = err.stack.split("\n").find(e => e.includes("<anonymous>:") || e.includes("Function:"));
let lineIndex = (line.includes("<anonymous>:") && line.indexOf("<anonymous>:") + "<anonymous>:".length) || (line.includes("Function:") && line.indexOf("Function:") + "Function:".length);
console.log(+line.substring(lineIndex, lineIndex + 1) - 2);
}