代码之家  ›  专栏  ›  技术社区  ›  Justin Love

使用捕获自定义javascript异常窗口错误-在IE中

  •  4
  • Justin Love  · 技术社区  · 15 年前

    我有一个自定义的异常类,用于特定情况。它可以从任何地方抛出,所以try/catch并不实用。

    throw new CustomException;
    

    我想抓住这个错误窗口错误然后过滤掉,这在我测试过的大多数浏览器中都很好。

    var window_onerror = window.onerror || function() {return false;};
    window.onerror = function(message, url, line)  {
      if (message.match(CustomException.prototype.name)) {
        return true;
      } else {
        return window_onerror(message, url, line);
      }
    };
    

    然而,在IE中窗口错误函数接收 Exception thrown and not caught 而不是我的自定义异常。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Plip    15 年前

    我们有一个通用的异常处理程序exceptioner.com但是,每个浏览器的行为不同,并以不同的方式报告相同的异常。

    另外,浏览器的不同本地化版本以不同的方式运行,例如,我从我们的一些用户那里看到了俄语版的Javascript错误,这不是世界上最容易解析的东西。

    此脚本将让您看到不同浏览器如何处理错误:-

    window.onerror = function(message, uri, line) {
        var fullMessage = location.href + '\n' + uri + '\n' + line;
        alert(fullMessage);
        return false;
    }
    

    谢谢,

    菲尔。

        2
  •  2
  •   user985399 user985399    5 年前

    声明一个全局变量和一些枚举。。

    var errorCode;
    const ErrCustomException = 1, ... ;
    

    errorCode = ErrCustomException;
    throw new CustomException;
    

    把条件改成这个。。

    window.onerror = function(message, url, line)  {
      if (errorCode == ErrCustomException) {
        return true;
      } else {
        return window_onerror(message, url, line);
      }
    };
    
        3
  •  1
  •   Christoph    15 年前

    我不知道有什么方法可以在 onerror 处理程序。作为一种解决方法,我建议使用自定义消息抛出一个通用运行时错误,即

    throw new Error('foo')
    

    message === 'foo'
    

    在处理程序函数中。

    编辑: 工作示例代码:

    window.onerror = function(message, url, line)  {
        alert(message === 'foo');
        return true;
    };
    
    throw new Error('foo');