首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获错误,onerror事件

捕获错误,onerror事件
EN

Stack Overflow用户
提问于 2017-12-21 21:29:19
回答 2查看 420关注 0票数 1

我正在尝试捕获用户web浏览器中发生的错误。我希望用户发送错误的屏幕截图,可能包括文件,行号等。

我希望它现在会变得相当简单和标准化。但我想知道。经过反复试验,我得出了以下结论:

代码语言:javascript
复制
window.addEventListener('error', function (e) {
    console.log(e);
    let error = e;
    if (e.error) error = e.error;
    let msg = "There was an error.";
    msg += " Please go to https://somewhere.com/";
    msg += " and post an image of this message. \n\nError: ";
    if (error.message) {
        msg += error.message;
    } else {
        msg += error;
    }
    if (error.stack) msg += "\n\n"+error.stack;
    console.log(msg);
    alert(msg);
});

它起作用了吗?嗯,也许吧,但不是我想的那样。例如,尝试从控制台执行此操作时,在警报弹出窗口中未显示"test error“,而是"Script error":

代码语言:javascript
复制
setTimeout(function(){throw "test error"}, 1000)

我该怎么做呢?(我目前只对较新的浏览器感兴趣,实际上只对Chrome感兴趣。也许以后会有Firefox和Edge。)

还有一件相当重要的事情:我只需添加这个处理程序就能捕捉到哪些错误?Asynch?承诺?等。

编辑:首先总结到目前为止的答案。最重要的是这两者之间的区别(只有第二个在Chrome中提供了回溯):

代码语言:javascript
复制
throw "some error"
throw Error("some error")

现在来看问题的另一半。捕获了哪些错误。例如,我在控制台中得到了这个,但它从来没有到达我上面的错误处理程序。为什么?(这是来自IndexedDB,使用idb.js)

代码语言:javascript
复制
Uncaught (in promise) DOMException: Key already exists in the object store.
EN

回答 2

Stack Overflow用户

发布于 2017-12-21 21:39:11

您可能需要抛出一个错误:)

代码语言:javascript
复制
 throw new Error("test error")
票数 1
EN

Stack Overflow用户

发布于 2017-12-21 22:13:06

好的,这个html文件看起来工作得很好:

代码语言:javascript
复制
<html>
<body>
    <script>
        window.addEventListener('error', (e) => {
            console.log(e);
        });

        setTimeout(() => { throw 'Hello world'; }, 1000);
    </script>
</body>
</html>

这应该会将正确的错误输出到控制台。但是,当我尝试在DevTools控制台中直接设置处理程序,并在超时处理程序中抛出错误时,我得到‘脚本错误。’。在后一种情况下,Chrome似乎认为这是违反同源策略。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47926040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档