私は現在、Web アプリケーションに取り組んでいます。ページ内の js コードでキャッチされない Javascript エラーを処理する JS ロギング メカニズムがあります。window.onerror を使用して、そのようなエラーをすべてキャッチし、他の場所に記録しています。
ただし、問題は window.onerror イベントを持たない Opera にあります。私が考えることができる1つのアプローチは、すべてのjs関数コードを文字列処理し、ボディロード後にそれらの関数内にtry catchブロックを挿入することです。うまくいかないことも多いですが、ある程度はうまくいきます。
私はこのアプローチが悪いと確信していますが、もっと良いものは考えられませんでした. お知らせ下さい。
更新: 今のところ、以下のコードを呼び出して、できるだけ多くのエラーをキャッチしています。
function OnBodyLoad()
{
var allElements = document.getElementsByTagName("*");
for(var cnt = 0;cnt < allElements.length;cnt++)
{
RegisterAllEvents(allElements[cnt]);
}
}
function RegisterAllEvents(objToProcess){
for(var cnt = 0;cnt < objToProcess.attributes.length;cnt++){
if(IsAttributeAnEvent(objToProcess.attributes[cnt].name))
{
objToProcess.attributes[cnt].value = 'try{'+objToProcess.attributes[cnt].value+'}catch(err){LogError("'+ objToProcess.id+'"'+ ',err);}';
}
}
}