GlobalEventHandlers.onerror - Web API 接口参考 编辑

混合事件 GlobalEventHandlers 的 onerror 属性是用于处理 error 的事件

Error事件的事件处理程序,在各种目标对象的不同类型错误被触发:

  • JavaScript运行时错误(包括语法错误)发生时,window会触发一个ErrorEvent接口的error事件,并执行window.onerror()
  • 当一项资源(如<img><script>加载失败,加载资源的元素会触发一个Event接口的error事件,并执行该元素上的onerror()处理函数。这些error事件不会向上冒泡到window,不过(至少在Firefox中)能被单一的window.addEventListener捕获。

加载一个全局的error事件处理函数可用于自动收集错误报告。

语法

由于历史原因,window.onerrorelement.onerror接受不同的参数。

window.onerror

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

函数参数:

  • message:错误信息(字符串)。可用于HTML onerror=""处理程序中的event
  • source:发生错误的脚本URL(字符串)
  • lineno:发生错误的行号(数字)
  • colno:发生错误的列号(数字)
  • errorError对象(对象)

若该函数返回true,则阻止执行默认事件处理函数。

window.addEventListener('error')

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

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

element.onerror

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

element.onerror使用单一Event参数的函数作为其处理函数。

注意事项

当加载自不同域的脚本中发生语法错误时,为避免信息泄露(参见bug 363897),语法错误的细节将不会报告,而代之简单的"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的参数命名为eventsourcelinenocolnoerror。针对不满足此要求的浏览器,传递的参数仍可使用arguments[0]arguments[2]来获取。

规范

规范状态注释
HTML Living Standard
onerror
Living Standard

浏览器兼容性

在Firefox 14之前,当<script>加载失败时,window.onerror被传入"Error loading script"信息。该bug已在bug 737087修复,取而代之,在这种情况下,scriptElement.onerror将被触发。

自Firefox 31始加入最后两个参数(colno and error),意味着通过提供的Error对象,你可以从window.onerror访问脚本错误的stack trace(bug 355430。)

参见

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:78 次

字数:7616

最后编辑:8年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文