假设我的网站上有这个脚本标签(从 SO 借来的)。
<script type="text/javascript" async=""
src="http://edge.quantserve.com/quant.js"></script>
如果 edge.quantserve.com
出现故障或停止响应而不返回 404,那么在加载其余页面之前是否必须等待超时?我在想 Chaos Monkey 出现并破坏了我的站点所依赖的服务器,该服务器不属于 CDN 并且故障转移很差。
处理此问题的行业标准方法是什么?我找不到关于 SO 的骗局,也许我正在寻找错误的术语。
更新:我应该更仔细地查看 SO 代码,底部有这个:
<script type="text/javascript">var _gaq=_gaq||[];_gaq.push(['_setAccount','UA-5620270-1']);
_gaq.push(['_setCustomVar', 2, 'accountid', '14882',2]);
_gaq.push(['_trackPageview']);
var _qevents = _qevents || [];
(function(){
var s=document.getElementsByTagName('script')[0];
var ga=document.createElement('script');
ga.type='text/javascript';
ga.async=true;
ga.src='http://www.google-analytics.com/ga.js';
s.parentNode.insertBefore(ga,s);
var sc=document.createElement('script');
sc.type='text/javascript';
sc.async=true;
sc.src='http://edge.quantserve.com/quant.js';
s.parentNode.insertBefore(sc,s);
})();
</script>
好的,如果 quant.js
文件加载失败,它会创建一个带有 ga.async=true;
的脚本标签。也许这就是诀窍。
最佳答案
一般来说,做好跨浏览器是很棘手的。
一些建议:
- 将脚本移到 HTML 页面的最底部(以便在您请求该脚本之前显示几乎所有内容)
- 将它移到底部并用
<script>document.write("<scr"+"ipt src='http://example.org/script.js'></scr"+"ipt>")</script>
包裹起来或您在更新后添加的方式 (document.createElement('script')
) - 最后一个选项是通过 XHR 加载它(但这仅适用于同域,或仅当在第三方服务器上启用 CORS 时才适用于跨域);然后你可以使用
timeout
XHR 的属性(对于 IE 和 Fx12+),在其他浏览器中,使用setTimeout
并检查 XHR 的readyState
.目前它有点复杂,而且非常不跨浏览器,因此选项 2 看起来最好。
关于javascript - 我的网站应该如何优雅地处理偶尔丢失的 javascript 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11749206/