我目前正在开发一个 Web 应用程序,我有一个 JS 日志记录机制,可以处理页面内的 js 代码未捕获的 Javascript 错误。我正在使用 window.onerror 来捕获所有此类错误并将它们记录在其他位置。
但是,问题在于没有 window.onerror 事件的 Opera。我能想到的一种方法是,对所有 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);}';
}
}
}