前端面试之4-4 错误监控

前端面试之4-4 错误监控_第1张图片

这类题有两种问法,开门见山问你如果错误监控。或者问你如何保证产品质量。产品上线, 线上错误如果都不能自动收集上来,怎么保证产品质量体系。其实考察的都是错误监控。

前端面试之4-4 错误监控_第2张图片


前端面试之4-4 错误监控_第3张图片

两种捕获:第一种通过try catch部署到代码中。第二个window.onerror ,这个是DOM0的,也可以用addEventListener 注册DOM2级事件也是可以的。

资源加载错误,特殊在什么地方呢?说object.onerror,比如说这个object是图片,图片有一个onerror事件,通过onerror就能捕获这个加载错误。script标签也是,也可以添加一个onerror事件。

1)强调一下,window.onerror 只能捕获即时运行错误,不能捕获资源加载错误。资源加载错误不会冒泡。script标签也是,这个节点发生错误,触发它本身这个节点onerror就行了,不会冒泡到window了。所以为什么window.onerror 无法捕获资源加载错误的一个原因。

2)高级浏览器会有performance对象,这个对象有个getEntries()用来获得所有已加载资源的加载时长。通过这个方式间接的拿到没有加载的资源错误。

前端面试之4-4 错误监控_第4张图片

比如慕课网,这个API返回一个数组,就有forEach方法,就遍历一下。

前端面试之4-4 错误监控_第5张图片

通过这个方法,把数组下面name打印出来,就能拿到资源。这些资源就是已经成功加载的。通过这种方式,判断哪个资源没有加载的话,比如图片,就可以document.getElementByTagName("img")

这是我们能拿到所有需要加载的img集合。减去上面已经成功加载的集合,就是没有成功加载的。

3)可以通过window上事件捕获,一样可以拦截资源加载错误。onError不是冒泡,但是有捕获冒泡两个过程,阻止了冒泡,但是没有阻止捕获啊。


前端面试之4-4 错误监控_第6张图片

true才是捕获。打印一下对象。这个script引用的是一个不存在的资源文件,所以应该是报错的。 

前端面试之4-4 错误监控_第7张图片

这是用捕获的方式,能拿到资源加载错误。


如果面试官问你,如果我们js错误是跨域的,也就是js本身是跨域的,里面错误还会被捕获吗?如果可以,会出现什么错误提示。这种情况应该怎么处理?

跨域也可以,它会拿到一个错误,但是所有跨域js错误都是一个script error

前端面试之4-4 错误监控_第8张图片


行号列号都拿不到。只能拿到错误,

怎么办?两步走:

1、2 如图。后面可以是新号也可以是域名。就可以拿到错误的具体信息了。

前端面试之4-4 错误监控_第9张图片

1.能做到上报错误。但是所有利用image对象上报的。

前端面试之4-4 错误监控_第10张图片


前端面试之4-4 错误监控_第11张图片


这时候请求已经发出去了。利用这种方式发送请求非常简单,比ajax简单的多。一行代码搞定。轻松实现一个资源网上报。

你可能感兴趣的:(前端面试之4-4 错误监控)