我是靠谱客的博主 发嗲老鼠,最近开发中收集的这篇文章主要介绍js捕获404错误,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


title: js捕获404错误 tags:

  • fundebug
  • 404
  • usecaptureargument
  • errorEvent categories: 前端 date: 2017-06-25 18:18:53

最近使用fundebug,发现fundebug升级到了0.1.0,支持了

Fundebug的JavaScript监控插件更新至0.1.0,可以监控3种不同类型的前端BUG:JavaScript执行错误资源加载错误HTTP请求错误

Fundebug能够捕获这些BUG

以前一直记得浏览器404是无法捕获的,这是什么黑魔法呢?

众所周知通过ajax是可以获得状态的,那么正常图片的加载出错等我们都是通过onError来加载。但是全局捕捉404貌似没听过,特别是js等。

之前因为考虑无法捕捉到404等错误还特别考虑了非覆盖发布。关于移动端静态资源缓存的说明

那么fundebug通过什么思路实现的呢?

扒了一下源码:

发现两处区别:

  1. 使用的是addEventListener而不是onError
  2. 判断了t.message

而我们正常是通过window.onerror来捕捉错误并且直接使用异常的message。

参考 www.w3.org/TR/html5/sc…

Jump to the appropriate set of steps from the list below:

If the load resulted in an error (for example a DNS error, or an HTTP 404 error)Executing the script block must just consist of firing a simple event named error at the element.

Firing a simple event named e means that a trusted event with the name e, which does not bubble (except where otherwise stated) and is not cancelable (except where otherwise stated), and which uses the Event interface, must be created and dispatched at the given target.

通过Google发现确实存在此种方法捕获各种错误

To capture all error events on the page, you can use addEventListener with the useCaptureargument set to true. The reason window.onerror will not do this is because it uses the bubble event phase, and the error events you want to capture do not bubble.

If you add the following script to your HTML before you load any external content, you should be able to capture all the error events, even when loading offline.

<script type="text/javascript"> window.addEventListener('error'function(e{ console.log(e); }, true); </script>
复制代码

You can access the element that caused the error through e.target. For example, if you want to know what file did not load on an img tag, you can use e.target.src to get the URL that failed to load.

因此可以认为上文中加载失败可以触发event,但是必须要设置useCaptureargument为true。

通过断点调试发现当出现404错误时类型为ErrorEvent

对应的event确实是没有message的。


e.addEventListener && e.addEventListener("error", function(t) {
if (!t.message) {
var r, n = (r = t.target ? t.target : t.srcElement) && r.outerHTML;
n && n.length > 200 && (n = n.slice(0, 200));
var a = {
type: "resourceError",
target: {
outerHTML: n,
src: r && r.src,
tagName: r && r.tagName,
id: r && r.id,
className: r && r.className,
name: r && r.name,
type: r && r.type
}
};
if (a.target.src && e.XMLHttpRequest) {
var u = new XMLHttpRequest;
u.Fundebug = !0,
u.open("OPTIONS", a.target.src),
u.send(),
u.onload = function(e) {
200 !== e.target.status && (a.target.status = e.target.status,
a.target.statusText = e.target.statusText),
f(a)
}
}
}
}, !0);
复制代码

由此就可以捕获了加载错误。

最后

以上就是发嗲老鼠为你收集整理的js捕获404错误的全部内容,希望文章能够帮你解决js捕获404错误所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部