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