gpt4 book ai didi

javascript - 我们如何监听不触发 window.onerror 的错误?

转载 作者:行者123 更新时间:2023-12-03 03:20:37 29 4
gpt4 key购买 nike

https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onerror状态:

Note that some/many error events do not trigger window.onerror, you have to listen for them specifically.

  1. 您能否提供一些不会触发 window.onerror 的错误示例?我知道 SyntaxError 就是其中之一。
  2. 您能否提供一个小代码示例来展示我们如何监听此类错误?我们也可以监听 SyntaxError 吗?

最佳答案

window.onerror无论是语法错误还是运行时错误都会被触发。 This page from quirksmode列出了它将捕获和不会捕获的错误事件。

Could you please provide a small code example to show how we can listen for such errors? Can we listen for SyntaxError too?

通过一个小代码示例来展示我们如何监听此类错误:

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
window.onerror = function (errorMsg, url, lineNumber) {
alert(errorMsg + lineNumber);
// alert("This is a stack trace! Wow! --> %s", error.stack);
};
</script>
</head>

<body>
<script type="text/javascript">
//var x=document.getElementById("demo").value; //uncomment and run to see
document.write('careless to close the parentheses?'; // ')' is not given
</script>
</body>
</html>

在浏览器中运行此示例将弹出类似于以下内容的警报消息:

JavaScript error: SyntaxError: missing ) after argument list on line 26 for page_url

在上面的例子中:window.onerror = function(message, url, linenumber) ,参数是:

  1. message :错误消息(DOMString)
  2. url :包含错误的文件的 URL (DOMString)
  3. linenumber :发生错误的行号(unsigned long)

如果您通过输入 var x=document.getElementById("demo").value; 来运行相同的示例而不是带有语法错误的代码(如我在示例中所示),它也将被 window.onerror() 捕获。函数并会显示类似于此的警报消息:

JavaScript error: TypeError: document.getElementById(...) is null on line 25 for page_url

window.onerror 的作用类似于全局 try/catch block ,允许您优雅地处理( even with server logging )您不希望看到的未捕获异常:

  • 未捕获的异常

    1. throw "some messages"
    2. call_something_undefined() ;
    3. cross_origin_iframe.contentWindow.document; ,安全异常
  • 更多编译错误

    1. <script>{</script>
    2. <script>for(;)</script>
    3. <script>"oops</script>
    4. setTimeout("{", 10); ,它将尝试将第一个参数编译为脚本

但是描述了两个主要问题 here很好:

  1. 与本地 try/catch block 不同,window.onerror 处理程序不会可以直接访问异常对象,并在全局上下文而不是发生错误的本地上下文。那意味着开发人员无权访问调用堆栈,并且无法通过沿着方法的链向上构建自己的调用堆栈来电者。

  2. 浏览器不遗余力地清理提供给浏览器的数据。处理程序,以防止无意的数据泄漏跨源脚本。如果您将 JavaScript 托管在 CDN 上(正如您应该),你会在上面的处理程序中得到“脚本错误。”、“”和 0。这并不是特别有帮助。

关于javascript - 我们如何监听不触发 window.onerror 的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19141195/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com