当cdn js cloudflare不可用时,lightbox2后备

时间:2014-12-17 20:17:49

标签: javascript cloudflare lightbox2 fallback

我通过以下CDN //cdnjs.cloudflare.com/ajax/libs/lightbox2/2.7.1/js/lightbox.min.js

加载lightbox2

如果这不可用,那么我想回退到我的核心文件。如何检查灯箱是否已定义,以避免加载我的核心文件。

我尝试typeof lightbox === "undefined",但总是返回true,强制加载我的核心文件。

我已经有了jquery,angular等的后备 - 这是lightbox2,我在检查它是否已被加载时遇到问题。

1 个答案:

答案 0 :(得分:1)

是的,这里的问题是全局范围内没有任何内容,因为灯箱不会向其添加任何内容。 (见SO question)。这就是为什么你不能像window.lightbox那样测试它。

解决方法是使用ajax请求加载脚本,如下面的演示中所示。 getScript方法是一种速记Ajax函数(有关详细信息,请参阅here。)

如果加载cdn失败,您可以在其中添加失败的回调函数,以便将本地脚本添加到DOM中。

您可以对从cdn加载的任何文件(例如灯箱的样式表)执行相同的操作。

var addLocalScript = function (src) {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = src; // use this for linked script
    //script.text = "alert('voila!');" // use this for inline script
    document.body.appendChild(script);
};

$(function () {
    var url = 'https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.7.1/js/lightbox.min.js';

    $.getScript(url)
        .done(function (script, textStatus) {
        console.log(textStatus);
    })
        .fail(function (jqxhr, settings, exception) {
        console.log('cdn load failed');
        //add local script
        addLocalScript('js/lightbox/lightbox.min.js');
    });
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.7.1/css/lightbox.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="http://lorempixel.com/400/200" data-lightbox="image-1" data-title="My caption"><img src="http://lorempixel.com/400/200"/></a>