正しい場合false、何か間違いがあれば簡単なエラーメッセージを返します。
上記関数は、スクリプトを実行しないように「if(0){}」を付けて実行し、エラーがあるかチェックします。渡されたスクリプトは結局実行されないので、ランタイムエラーの確認はできません。// スクリプトに文法エラーがあるか function checkScript(script) { var ret = false; try{ eval('if(0){'+script+'}'); } catch(e){ ret = e.message; } return ret; }
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 件のコメント:
コメントを投稿