正しい場合false、何か間違いがあれば簡単なエラーメッセージを返します。
// スクリプトに文法エラーがあるか
function checkScript(script) {
var ret = false;
try{
eval('if(0){'+script+'}');
} catch(e){
ret = e.message;
}
return ret;
}
上記関数は、スクリプトを実行しないように「if(0){}」を付けて実行し、エラーがあるかチェックします。渡されたスクリプトは結局実行されないので、ランタイムエラーの確認はできません。Textareaでデータとしてjavascriptを入力させたい時などに役に立つかと思います。
ブラウザをFireFoxに限れば、少しコードは複雑になりますが、エラーの発生した行番号も取得することが可能です。少々トリッキーですが、tryの前でエラーオブジェクトをnewしてその行番号を調べることにより、evalの行番号を求め、catch中でeのエラー行の行番号から、evalの行番号を引いた結果に1を足したものが、入力スクリプトのエラー行になります。残念ながらIEではエラーオブジェクトから行番号が取得できないようです。
// スクリプトに文法エラーがあるか(行番号付き)
function checkScript(scr) {
var ret = false;
if (!window._lineEval) _lineEval=(new Error()).lineNumber+2 || -1;
try{
eval('if(0){'+scr+'}');
} catch(e){
ret = {
line:(e.lineNumber?e.lineNumber-_lineEval+1:-1),
msg:e.message
};
}
return ret;
}
0 件のコメント:
コメントを投稿