我搞不懂是否使用cdn,所以我浏览了这些链接link1和link2。
他们被告知要使用本地脚本作为cdn的后盾。
所以我保留了这个代码
<script src="https://secure.skypeassets.com/i/scom/js/skype-uri.js" async></script>
<script>
window.Skype || document.write('<script src="javascripts/skype-uri.js" async>\x3C/script>')
</script>
<!-- -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script>
<script>
window.angular || document.write('<script src="javascripts/angular.min.js">\x3C/script>')
</script>
<!-- -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-animate.min.js"></script>
<script>
window['angular-animate'] || document.write('<script src="javascripts/angular-animate.min.js">\x3C/script>')
</script>
<!-- -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-aria.min.js"></script>
<script>
window['angular-aria'] || document.write('<script src="javascripts/angular-aria.min.js">\x3C/script>')
</script>
<!-- -->
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.4/angular-material.min.js"></script>
<script>
window['angular-material'] || document.write('<script src="javascripts/angular-material.min.js">\x3C/script>')
</script>问题是它获取本地文件,也从cdn获得相同的文件。
当我点击页面并通过charles proxy (或任何其他网络监控工具)进行监视时
有点奇怪,但我在这里找不到问题。
发布于 2016-02-15 14:18:51
使用window.angular || /* fallback code*/的脚本的回退看起来很好,应该可以工作(对我来说)。
请记住,测试没有引用脚本名,而是检查如果脚本已经加载,应该设置的已知全局变量是否确实存在。因此,对于其他脚本,您需要知道它们设置了哪些全局变量(如果有的话),或者向现有对象添加了哪些方法/属性,并检查它们。
顺便说一下,Skype脚本上的async标志会破坏这种测试,因为有一个很好的chanse,在浏览器获取和分析外部脚本之前,对Skype的检查将执行。
至于样式表回退,这很好(即使本地副本也失败了--浏览器以某种方式处理了这个问题):
<link rel="stylesheet" href="//cdnurl/style.css" onerror="this.href='localcopy.css'" />编辑:要检查角模块,您可以在一个尝试捕获块中使用angular.module('moduleName') (受这个答案启发):
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-animate.min.js"></script>
<script>
try {
angular.module('ngAnimate')
} catch(e){
document.write('<script src="javascripts/angular-animate.min.js">\x3C/script>')
}
</script>https://stackoverflow.com/questions/35411284
复制相似问题