IT技术博客大学习 共学习 共进步

JS文件加载失败处理

Kejun's Blog 2011-05-17 08:42:19 浏览 3,501 次

    浏览器的文件加载实际上是有非常纠结的兼容问题的。最近看到@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

建议继续学习

  1. 一个IE6下重复加载的BUG (阅读 3,882)
  2. php无法加载pcre.so的解决办法 (阅读 3,843)
  3. 用C++面向对象的方式动态加载so (阅读 3,822)
  4. IE6图片加载的一个BUG (阅读 3,603)
  5. 渐进式的脚本加载 (阅读 3,360)
  6. 关于Feed流信息的加载方式 (阅读 3,363)
  7. 动态加载JavaScript的小实践 (阅读 3,101)
  8. 交互模式之分页还是加载? (阅读 3,003)
  9. 加载,不只是少一点点 (阅读 2,500)
  10. 内容loading加载后高度变化CSS3 transition体验优化 (阅读 2,441)