window属性:onerror

由 Carrie 创建, 最后一次修改 2018-05-02

onerror属性

onerror属性表示error事件的事件处理程序的。针对不同类型的错误,在不同的目标上激发error事件:

  • 当发生JavaScript运行时错误(包括处理程序中引发的语法错误和异常)时,使用接口ErrorEvent的error事件将在window被触发并被window.onerror()调用(以及由window.addEventListener连接的处理程序)。
  • 当一个资源(如<img>or <script>)加载失败时,使用接口Event的error事件触发启动加载的元素,并调用元素上的onerror()处理程序。这些错误事件不会冒泡到window,但是(至少在Firefox中)可以通过单个捕获window.addEventListener来处理。

安装全局error事件处理程序对于自动收集错误报告非常有用。

onerror属性语法

由于历史的原因,不同的参数被传递给window.onerror和element.onerror处理程序(以及关于错误类型window.addEventListener的处理程序)。

window.onerror

window.onerror = function(message, source, lineno, colno, error) { ... }

参数:

  • message:错误消息(字符串)。在HTML onerror=""处理程序event(sic!)中可用。
  • source:引发错误的脚本的URL(字符串)
  • lineno:发生错误的行号(数值)
  • colno:发生错误的行的列号(数值)
  • error:错误对象(对象)

当函数返回true时,这可以防止触发默认事件处理程序。

window.addEventListener( 'error')

window.addEventListener('error', function(event) { ... })

ErrorEvent类型的事件包含有关事件和错误的所有信息。

element.onerror

element.onerror = function(event) { ... }

element.onerror接受一个Event类型的单个参数的函数。

一个很好的例子就是当你使用一个图像标签时,并且需要指定一个备份映像,以防您需要的服务器因任何原因而无法使用。

<img src="imagenotfound.gif" onerror="this.onerror=null;this.src='imagefound.gif';" />

我们在函数中使用this.onerror=null的原因 是,如果onerror图像本身产生错误,浏览器将陷入无限循环。

笔记

当从不同来源加载的脚本中发生语法错误时,不会报告语法错误的详细信息,这样可以防止泄漏信息。相反,报告的错误只是"Script error"。这种行为可以在某些浏览器中使用<script>中的crossorigin属性来重写,并让服务器发送相应的CORS HTTP响应标头。解决方法是隔离“Script error”,并处理它,并且知道错误细节仅在浏览器控制台中可见而不能通过JavaScript访问。

window.onerror = function (msg, url, lineNo, columnNo, error) {
    var string = msg.toLowerCase();
    var substring = "script error";
    if (string.indexOf(substring) > -1){
        alert('Script Error: See Browser Console for Detail');
    } else {
        var message = [
            'Message: ' + msg,
            'URL: ' + url,
            'Line: ' + lineNo,
            'Column: ' + columnNo,
            'Error object: ' + JSON.stringify(error)
        ].join(' - ');

        alert(message);
    }

    return false;
};

当使用内嵌HTML标记时(<body onerror="alert('an error occurred')">),HTML规范要求传递给onerror的参数被命名为event,source,lineno,colno,error。在还没有实现这一要求的浏览器,他们仍然可以通过arguments[2]获得arguments[0]。

规范

规范 状态 注释
HTML Living Standard 
在这个规范中定义了'onerror'。
Living Standard
 

浏览器兼容性

在Firefox 14中,<script>加载失败之前, window.onerror调用了消息“Error loading script”。这在bug 737087中得到修复,现在 scriptElement.onerror在这种情况下被调用。

自Firefox 31以来,最后2个参数(colno和error)被添加,这意味着您可以通过提供的Error对象从window.onerror访问脚本错误的堆栈跟踪。

以上内容是否对您有帮助:

您可能还喜欢:

二维码
建议反馈
二维码