最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Is there a global approach to catch network errors in javascript - Stack Overflow

programmeradmin4浏览0评论

I'm researching the possibility of automated on-page error detection via Javascript. I have found several questions where the answer allows you to catch Javascript pilation and runtime errors globally via window.onerror, but no answers mention other types of non-Javascript errors that are often reported in browser error consoles. I'm primarily interested in network errors (invalid URI's, SSL errors, HTTP errors, timeouts) and resource interpretation errors (mismatching types resulting in aborting the interpretation of the resource, parsing errors on loaded resources, etc).

I checked the performance.getEntries method, but I'm baffled to find that it does not seem to contain network requests that resulted in errors (I checked only in Chrome 29...)

I don't need full cross browser patibility.. as long as it works on some browsers, and doesn't break the others, that's fine.

I'm researching the possibility of automated on-page error detection via Javascript. I have found several questions where the answer allows you to catch Javascript pilation and runtime errors globally via window.onerror, but no answers mention other types of non-Javascript errors that are often reported in browser error consoles. I'm primarily interested in network errors (invalid URI's, SSL errors, HTTP errors, timeouts) and resource interpretation errors (mismatching types resulting in aborting the interpretation of the resource, parsing errors on loaded resources, etc).

I checked the performance.getEntries method, but I'm baffled to find that it does not seem to contain network requests that resulted in errors (I checked only in Chrome 29...)

I don't need full cross browser patibility.. as long as it works on some browsers, and doesn't break the others, that's fine.

Share Improve this question asked Sep 30, 2013 at 15:47 Fabio BeltraminiFabio Beltramini 2,5111 gold badge17 silver badges25 bronze badges 3
  • I think most of them are just warnings that cannot be detected by javascript, since the give normal results. However you might add your own handlers to each request and check those things manually. – Bergi Commented Sep 30, 2013 at 15:54
  • Maybe it's possible to do this using service workers? – Flimm Commented Oct 7, 2020 at 11:38
  • performance.getEntries() does seem to return network requests that failed, but there is nothing to distinguish them from network requests that succeeded. (See this issue) – Flimm Commented Oct 7, 2020 at 12:05
Add a ment  | 

2 Answers 2

Reset to default 2

The window.onerror handler catches Javascript errors in Chrome 13+, Firefox 6.0+, Internet Explorer 5.5+, Opera 11.60+ and Safari 5.1+. There's already a really good answer on StackOverflow which provides a lot of information about it. It does not catch failures to load resources, though.

As far as other elements (such as images) are concerned, jQuery provides an .error() method to attach an error event handler to alert the user when an image or external script fails to load. If you can't use jQuery, then another option is to preload all images / external resources via XMLHttpRequest and listen to the status (the HTTP response code) of the request (anything other than 200 OK or 304 Not Modified is something you'll want to return an error). The downside to this is that, since event handlers and such have to be attached before the page is fully loaded, anyone who has JavaScript disabled is going to be looking at a fragmented, possibly blank page.

Invalid URIs and HTTP errors are best handled server-side. A well-formed .htaccess file, bined with Apache's mod_rewrite (or an equivalent) can provide a lot of cushioning for bad requests to the server.

No, I have not found a global approach yet, except perhaps service workers.

(Note that window.onerror only catches errors thrown in Javascript, it does not catch failure to load resources from a <script src="misspelling.js"></script> element, for example.)

Instead, you could add an onerror attribute to every element that loads a resource, but you would need to do this in the HTML sent by the server:

<script src="misspelling.js" onerror="alert('js')"></script>
<img src="misspelling.jpg" onerror="alert('img')">
<link rel="stylesheet" href="mispelling.css" onerror="alert('css')">

发布评论

评论列表(0)

  1. 暂无评论