当前位置:  开发笔记 > 编程语言 > 正文

模仿窗口.使用javascript在Opera中的错误

如何解决《模仿窗口.使用javascript在Opera中的错误》经验,为你挑选了2个好方法。

我目前正在开发一个Web应用程序,我有一个JS日志记录机制,处理未被页面内的js代码捕获的Javascript错误.我使用window.onerror来捕获所有这些错误并将其他地方记录在哪里.

但问题是Opera没有window.onerror事件.我能想到的一种方法是,对所有js函数进行字符串处理,然后在body加载后在这些函数中插入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);}';
        }
    }
}

Kornel.. 9

Opera 11.60+支持window.onerror.

Opera的Dragonfly支持远程调试.您可能能够破解它(它全部用JavaScript编写)并自己记录错误(遗憾的是协议尚未发布).



1> Kornel..:

Opera 11.60+支持window.onerror.

Opera的Dragonfly支持远程调试.您可能能够破解它(它全部用JavaScript编写)并自己记录错误(遗憾的是协议尚未发布).



2> 小智..:

你可以在Opera中替换Error.prototype.toString!

window.onerror = function (msg) {
  // send msg to http://errors.net/log.php, for example
  (new Image()).src = 'http://errors.net/log.php?msg=' + encodeURIComponent(msg);
};
if (({}).toString.call(window.opera) === '[object Opera]') {
 (function () {
   var x = Error.prototype.toString;
   Error.prototype.toString = function () {
     var msg = '';
     try {
       msg = x.apply(this, arguments);
       if (typeof (window.onerror) === "function") {
         window.onerror(msg, typeof (this) === 'object' ? this.stack : '', '');
       }
     } catch (e) {}
     return msg;
   };
 }());
}

看来,它不适用于Opera 11.50 ...仅适用于早期版本......

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有