Javascript 加载数据的回退计划
更新:为了让我的问题更清楚,我参考了下面的代码片段并实现了类似的功能-Javascript 加载数据的回退计划,javascript,css,cdn,font-awesome,fallback,Javascript,Css,Cdn,Font Awesome,Fallback,更新:为了让我的问题更清楚,我参考了下面的代码片段并实现了类似的功能- <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js"></script> <script type="text/javascript"> if (typeof jQuery == 'undefined') { document.write(unes
<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
if (typeof jQuery == 'undefined') {
document.write(unescape("%3Cscript src='/js/jquery-1.4.2.min.js' type='text/javascript'%3E%3C/script%3E"));
}
</script>
根据这个代码片段,我希望执行alert('loadingfromsbootstrapcdn')代码>即将发生。但事实并非如此。
代码if(typeof bootstrapcdn==“undefined”)
和if(typeof cloudflare==“undefined”)
是否检查css是否已从各自的URL加载?
我哪里出错了吗?您的javascript变量未定义
您的代码有点错误,在这两条语句的末尾都使用了双右括号
document.write(unescape('%3Clink type="text/css" rel="stylesheet" href="/common/fontawesome/css/font-awesome.min.css" /%3E'));
现在,如果它进入第一个if语句,那么它也应该可以工作。u必须这样编写代码,否则它将不会转到其他语句
function fallbackForFontAwesome() {
if (typeof bootstrapcdn == "undefined") {
document.write(unescape('%3Clink type="text/css" rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/3.1.1/css/font-awesome.min.css" /%3E'));
if (typeof cloudflare == "undefined") {
document.write(unescape('%3Clink type="text/css" rel="stylesheet" href="/common/fontawesome/css/font-awesome.min.css" /%3E'));
}
else {
alert('loading from cloudflare cdn');
}
} else {
alert('loading from bootstrap cdn');
}
}
fallbackForFontAwesome();
您的javascript变量未定义
您的代码有点错误,在这两条语句的末尾都使用了双右括号
document.write(unescape('%3Clink type="text/css" rel="stylesheet" href="/common/fontawesome/css/font-awesome.min.css" /%3E'));
现在,如果它进入第一个if语句,那么它也应该可以工作。u必须这样编写代码,否则它将不会转到其他语句
function fallbackForFontAwesome() {
if (typeof bootstrapcdn == "undefined") {
document.write(unescape('%3Clink type="text/css" rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/3.1.1/css/font-awesome.min.css" /%3E'));
if (typeof cloudflare == "undefined") {
document.write(unescape('%3Clink type="text/css" rel="stylesheet" href="/common/fontawesome/css/font-awesome.min.css" /%3E'));
}
else {
alert('loading from cloudflare cdn');
}
} else {
alert('loading from bootstrap cdn');
}
}
fallbackForFontAwesome();
您可以通过创建一个使用FontAwesome的“fa”类的span,然后测试其字体来测试FontAwesome是否已加载。然后删除跨度并返回结果
function isFontAwesomeLoaded() {
var span = document.createElement('span');
span.className = 'fa';
document.body.appendChild(span);
var result = (span.style.fontFamily === 'FontAwesome');
document.body.removeChild(span);
return result;
}
此函数将为您提供一个true或false结果,因此如果为false,您可以使用加载本地回退(document.write等)。您可以通过创建一个使用FontAwesome的“fa”类的跨度,然后测试其字体来测试FontAwesome是否已加载。然后删除跨度并返回结果
function isFontAwesomeLoaded() {
var span = document.createElement('span');
span.className = 'fa';
document.body.appendChild(span);
var result = (span.style.fontFamily === 'FontAwesome');
document.body.removeChild(span);
return result;
}
此函数将为您提供一个true或false结果,因此如果为false,您可以使用加载本地回退(document.write等)。创建一个函数,将
添加到正文中,以检查字体类型是否已加载(通过CDN)
window.onload=函数(){
var span=document.createElement('span'),
headHTML=document.head.innerHTML;
span.className='fa';
span.style.display='none';
document.body.insertBefore(span,document.body.firstChild);
//如果未加载“FontAwesome”,请向头部添加本地回退链接
如果(span.style.fontfamine!==“FontAwesome”){
headHTML+='';
document.head.innerHTML=headHTML;
}
document.body.removeChild(span);
};
创建一个函数,将
添加到正文中,以检查字体类型是否已加载(通过CDN)
window.onload=函数(){
var span=document.createElement('span'),
headHTML=document.head.innerHTML;
span.className='fa';
span.style.display='none';
document.body.insertBefore(span,document.body.firstChild);
//如果未加载“FontAwesome”,请向头部添加本地回退链接
如果(span.style.fontfamine!==“FontAwesome”){
headHTML+='';
document.head.innerHTML=headHTML;
}
document.body.removeChild(span);
};
谢谢你指出这一点。但我想我没有正确地表达我心中的这个问题。代码if(typeof bootstrapcdn==“undefined”)
和if(typeof cloudflare==“undefined”)
是否检查css是否已从各自的URL加载?否,他们无法检查,因为javascript未定义bootstrapcdn和cloudflare感谢您指出这一点。但我想我没有正确地表达我心中的这个问题。代码if(typeof bootstrapcdn==“undefined”)
和if(typeof cloudflare==“undefined”)
是否检查css是否已从各自的URL加载?否,他们无法检查,,因为javascript中未定义bootstrapcdn和cloudFlare,而bootstrapcdn
和cloudFlare
变量都来自何处?您正在加载的CSS文件(netdna.bootstrapcdn.com/font-awesome/3.1.1/CSS/font-awesome.min.CSS
)不是JavaScript文件。您关于jQuery
的示例之所以有效,是因为您正在加载一个JS文件,所以它实际上与您需要的用例不同。我不知道我们只能以这种方式加载js,而不是一般的任何文件。实际上,我的观点是:在jQuery示例中,您正在加载jQuery JS文件,它确实定义了一个名为jQuery
的JavaScript变量。在您的示例中,您正在加载字体可怕的CSS文件,该文件实际上没有定义任何JavaScript变量。因此,没有这样的JS变量bootstrapcdn
或cloudflare
。要测试CSS文件是否成功加载,您需要一个我不知道的聪明提示。bootstrapcdn
和cloudflare
变量都来自哪里?您正在加载的CSS文件(netdna.bootstrapcdn.com/font-awesome/3.1.1/CSS/font-awesome.min.CSS
)不是JavaScript文件。您关于jQuery
的示例之所以有效,是因为您正在加载一个JS文件,所以它实际上与您需要的用例不同。我不知道我们只能以这种方式加载js,而不是一般的任何文件。实际上,我的观点是:在jQuery示例中,您正在加载jQuery JS文件,它确实定义了一个名为jQuery
的JavaScript变量。在您的示例中,您正在加载字体可怕的CSS文件,该文件实际上没有定义任何JavaScript变量。因此,没有这样的JS变量bootstrapcdn
或cloudflare
。为了测试CSS文件是否成功加载,您需要一个我不知道的聪明提示。