JS文件加载失败处理

浏览器的文件加载实际上是有非常纠结的兼容问题的。最近看到@lifesinger做了一个具体的总结。这里比较麻烦的是IE6~8不区分加载成功或失败,都走一个回调。在网上看了一种解决方案是,在加载文件的最后置一个全局变量或改变标签的属性来区分,这样成功与否就通过这个标志位判断。但显然不太完美,还要改加载文件。

后来尝试另一种思路,先创建一个vbscript,src置成一个JS文件,如这个文件加载正常,肯定会报错否则不会有反应。这样如果window.onerror捕获到错误了,说明文件有效,再正常加载。如果没捕获到,n秒后会触发一个超时。

这部分代码:

      if(ie && ie < 9) {
        vbs = doc.createElement('script');
        vbs.language = 'vbscript';
        vbs.src = file;
       saveErrorHandle = win.onerror;
       win.onerror = function() {
         load();
         win.onerror = saveErrorHandle;
         return true;
       };
       setTimeout(function(){
         ref.parentNode.insertBefore(vbs, ref);
       }, 0);
     } else {
       load();
     }

DEMO: http://hikejun.com/demo/demo_js_errorback.html

Comments

  1. kejun says:

    补充:个人认为JS文件加载失败处理只用于有限的情况下。所以,这篇文章只是尝试一种新的思路

  2. dexbol says:

    有用! 一般情况下,script阻碍渲染和下载,如果script卡住了,会白页或出错,用户很容易就知道页面坏了,要刷新。

    但异步的话,页面好好的展示了,却不能交互,会比困惑,如果给出刷新页面的提示就好了。这样还能方便的判断是网络问题还是代码问题。

  1. SALVADOR says:

    Order@Acai.Without.Prescription” rel=”nofollow”>…

    Buynow…

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">