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文件是否成功加载,您需要一个我不知道的聪明提示。