我有一个工具,类似于JSFiddle的方式,它允许我动态输入JavaScript并在页面上运行它。代码可以是多行,通常会是。动态加载代码并获取解析错误的行数
不幸的是,如果在我输入的代码中存在异常,那么如果使用eval()运行代码,则无法获取异常的行号。
我找到了部分解决方案,这是不是使用
try{
eval(code);
}
catch(e) {
processException(e);
}
,而不是做这样的事情:
var s = document.createElement('script');
s.appendChild(document.createTextNode(
"try{\n" +
code +
"}catch(e){processException(e)}"));
document.body.appendChild(s);
现在,如果代码抛出一个异常,我看堆栈跟踪(在我的processException()函数)我可以得到异常的行号(在Firefox和铬,无论如何)。
如果它实际上是一个运行时异常,例如未定义的变量,那就很好。问题是如果有分析错误/语法错误,例如不匹配的parens或类似错误。我什么也没得到。
是否有任何疯狂的解决方法,至少在firefox和chrome上有效?函数对象内脚本标记内的eval是否在eval内?我正在尝试一切,并没有找到任何可行的方法。
这是一个非常有用的原理。谢谢。 – SystemParadox