2014-10-16 5 views
0

UPDATE: сделать мой вопрос яснее, я упомянул следующий фрагмент кода и реализовать что-то similar-Запасной план погрузки fontawesome

<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> 

я загружаю font-awesome.css и запасной вариант в моем JSP это ПУТЬ

<link type="text/css" rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/3.1.1/css/font-awesome.min.css" /> 

<script> 
    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 cloudfare'); 
      } 
     } else { 
      alert('loading from bootstrap cdn'); 
     } 
    } 
    fallbackForFontAwesome(); 
</script> 

в соответствии с этим фрагмент кода, я ожидал исполнения alert('loading from bootstrap cdn'); произойдет. Но это не так. Учитывается ли код if (typeof bootstrapcdn == "undefined") и if (typeof cloudflare == "undefined"), если css загружен из соответствующих URL-адресов или нет? Я что-то не так?

+1

Откуда взялись переменные 'bootstrapcdn' и' cloudflare'? Вы загружаете файл CSS ('netdna.bootstrapcdn.com/font-awesome/3.1.1/css/font-awesome.min.css'), а не файл JavaScript. Ваш пример о 'jQuery' работает, потому что вы загружаете JS-файл, поэтому на самом деле это не тот случай, который вам нужен – pomeh

+0

Oh. Я не знал, что мы можем загружать только js таким образом, а не только любой файл в целом. В любом случае, я мог бы это достичь? – AlwaysALearner

+1

На самом деле, моя точка зрения была такой: в примере jQuery вы загружаете файл jQuery ** JS **, который действительно определяет переменную JavaScript с именем 'jQuery'. В вашем примере вы загружаете font-awesome ** CSS ** файл, который действительно ** НЕ ОПРЕДЕЛИЕТ любую переменную JavaScript. Таким образом, нет такой JS-переменной 'bootstrapcdn' и' cloudflare'. Чтобы проверить, успешно ли загружен файл CSS, вам понадобится умный совет, о котором я не знаю. – pomeh

ответ

1

Ваш Javascript переменная не определена

Ваш код не так-то использовать)) двойные закрывающие скобки в конце в обоих заявлениях

document.write(unescape('%3Clink type="text/css" rel="stylesheet" href="/common/fontawesome/css/font-awesome.min.css" /%3E')); 

Теперь он должен работать также, если попасть в первый, если заявление о и есть писать код, как это в противном случае он не будет идти к другому

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(); 
+0

Спасибо, что указали это. Но я догадываюсь, что не понял этого вопроса, который у меня на уме. Есть ли код 'if (typeof bootstrapcdn ==" undefined ")' и 'if (typeof cloudflare ==" undefined ")' проверить, загружен ли css из соответствующих URL-адресов или нет? – AlwaysALearner

+0

Я обновил свой вопрос – AlwaysALearner

+1

Нет, они не могут проверить, потому что bootstrapcdn и cloudFlare не определены для javascript –

1

Вы можете проверить, если 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; 
} 

Эта функция даст вам истинный или ложный результат, так что вы можете использовать, чтобы загрузить локальный запасной вариант (document.write и т.д.), если ложно.

0

Создайте функцию, которая добавилак телу, чтобы проверить, загружен ли тип шрифта FontAwesome (через CDN).

window.onload = function() { 
    var span = document.createElement('span'), 
    headHTML = document.head.innerHTML; 

    span.className = 'fa'; 
    span.style.display = 'none'; 
    document.body.insertBefore(span, document.body.firstChild); 

    //if 'FontAwesome' didn't load, add a local fallback link to the head 
    if (span.style.fontFamily !== 'FontAwesome') { 
    headHTML += '<link rel="stylesheet" href="path/to/local/fallback.css">'; 
    document.head.innerHTML = headHTML; 
    } 

    document.body.removeChild(span); 
}; 
Смежные вопросы