我有一個工具,類似於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