Как проверить, если Twitter bootstrap загружен?



Как я могу проверить, есть ли ушко.JS загружается на страницу (файл bootstrap.js может быть скомпилирован в другой большой файл JS)?

584   8  

8 ответов:

все, что вам нужно сделать, это просто проверить, доступен ли метод Bootstrap-specific. Я буду использовать модальный в этом примере (работает для Bootstrap 2-4):

// Will be true if bootstrap is loaded, false otherwise
var bootstrap_enabled = (typeof $().modal == 'function');

это не 100% Надежный очевидно, так как модальная функция может быть предоставлена другим плагином, но тем не менее он будет делать эту работу...

вы также можете проверить Bootstrap 3-4 более конкретно (работает с 3.1+):

// Will be true if Bootstrap 3-4 is loaded, false if Bootstrap 2 or no Bootstrap
var bootstrap_enabled = (typeof $().emulateTransitionEnd == 'function');

обратите внимание, что все эти проверки требуют, что jQuery уже загружено.

Я бы предпочел проверить конкретный плагин bootstrap, так как модальные или всплывающие подсказки очень распространены, поэтому

if(typeof($.fn.popover) != 'undefined'){
 // your stuff here
}

или

 if (typeof $.fn.popover == 'function') { 
   // your stuff here
  }

работает в обеих версиях bootstrap

if (typeof([?])=='undefined') { /*bootstrap is not loaded */}

где [?] был бы любой объект или пространство имен, которое определено внутри самого файла JS.

понятие "включение" не существует в javascript.

см.https://github.com/netdna/bootstrap-cdn/issues/111#issuecomment-14467221

<script type="text/javascript">
    // <![CDATA[
    (function($){

        function verifyStyle(selector) {//http://stackoverflow.com/a/983817/579646
            var rules;
            var haveRule = false;

            if (typeof document.styleSheets != "undefined") {   //is this supported
                var cssSheets = document.styleSheets;

                outerloop:
                for (var i = 0; i < cssSheets.length; i++) {

                     //using IE or FireFox/Standards Compliant
                    rules =  (typeof cssSheets[i].cssRules != "undefined") ? cssSheets[i].cssRules : cssSheets[i].rules;

                     for (var j = 0; j < rules.length; j++) {
                         if (rules[j].selectorText == selector) {
                                 haveRule = true;
                                break outerloop;
                         }
                    }//innerloop

                }//outer loop
            }//endif

            return haveRule;
        }//eof

        <!-- BOOTSTRAP JS WITH LOCAL FALLBACK-->
        if(typeof($.fn.modal) === 'undefined') {document.write('<script src="<?=$path_js?>/bootstrap.min.js"><\/script>')}

        <!-- BOOTSTRAP CDN FALLBACK CSS-->
        $(document).ready(function() {

            if( verifyStyle('form-inline') )
            {
                $("head").prepend("<link rel='stylesheet' href='<?=$path_css?>bootstrap.min.css' type='text/css' media='screen'>");
            }
            else
            {
                //alert('bootstrap already loaded');
            }
        });
    })(jQuery);
    // ]]>
    </script>

совместимость с безопасным режимом jQuery,

проверка css может потребоваться настройки, если вы используете пользовательский css

АФАИК, короткий ответ

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

подробности

Twitter bootstrap-это, по сути, css и набор плагинов js для jquery. Имена плагинов являются общими, как $.сноска.кнопка и набор плагинов для использования также настраиваются. Наличие плагина просто по имени не помогло бы установить, что bootstrap присутствует.

вы можете забрать <script> элементы и проверьте их атрибут src, но, как вы указали, то, что вы ищете, - это сам код, а не имя файла, поскольку код может быть в любом файле.

лучший способ определить, если JavaScript service / class / etc. загружается на странице, чтобы искать что-то в DOM, что вы знаете, загружается данным JS.

например, чтобы определить, загружен ли jQuery, вы можете сделать null !== window.jQuery или узнать версию загруженного jQuery, jQuery.prototype.jquery

Я считаю, это самый простой способ сделать это. Насколько в CSS я не уверен, что есть простой способ сделать это.

<script>typeof Alert !== 'undefined' || document.write('<script src="/js/bootstrap/bootstrap.min.js">\x3C/script>')</script>

Если вы введете это в консоли, он выведет версию jQuery: console.log(jQuery().jquery);

Comments

    Ничего не найдено.