js异常捕获

一、js异常捕获的两种方式:

1、try...catch
2、window.onerror

try...catch

  • try...catch只能捕获运行时的错误,无法捕获语法错误;
  • 可以拿到出错的信息,堆栈,出错的文件、行号、列号;
  • 需要借助工具把所有的function块以及文件加入try,catch,可以在这个阶段打入更多的静态信息。

window.onerror

  • 可以捕捉语法错误,也可以捕捉运行时错误;
  • 可以拿到出错的信息,堆栈,出错的文件、行号、列号;
  • 只要在当前页面执行的js脚本出错都会捕捉到,例如:浏览器插件的javascript、或者flash抛出的异常等;
    跨域的资源需要特殊头部支持。
二、跨域的错误如何捕获:

外部加载的JS抛出异常的时候,出于安全方面的考虑,js错误信息可能包含一些敏感信息,比如用户名、权限提示等,希望能够把这类信息屏蔽。目前跨域的场景下会触发这种安全限制,window.onerror无法获得具体出错信息,而只能得到Script error 0 0。

解决方法

  • 响应头增加access-control-allow-origin
  • 每个function包裹try-catch
  • 切面包裹入口函数,try-catch

1、响应头增加access-control-allow-origin
连个步骤
① Access-Control-Allow-Origin header里设置允许cros的域

//nginx配置如下:
server{
        listen 80;
        server_name static.fourb.info;
                    
        location / {
            root E:\FB\static-site\static;
            proxy_pass http://static.fourb.info:8080;
            access_log  logs/fb.log main;
        }
                    
        location ~ \.(css|doc|eip|exe|gif|ico|jpg|js|mp3|png|swf|xml|txt|bm|html|htm|json)$ {
            root E:\FB\static-site\static;
            add_header 'Access-Control-Allow-Origin' "*";
            expires 7d;
        }
    }

② script引入外链的标签需要加多一个crossorigin的属性

二、异步的错误如何捕获:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容