В настоящее время я работаю над веб-приложением, у меня есть механизм ведения журналов JS, который обрабатывает ошибки Javascript, которые не обнаруживаются кодом js на странице. Я использую window.onerror, чтобы перехватывать все такие ошибки и регистрировать их где.
Однако проблема в Opera, у которой нет события window.onerror. Один из подходов, который я мог бы придумать, состоит в том, чтобы обработать все коды функций 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);}';
}
}
}