Come verificare se il bootstrap di Twitter è caricato?


86

Come posso verificare se c'è un bootstrap.js caricato sulla pagina (un file bootstrap.js può essere compilato in un altro grande file JS)?

Risposte:


125

Tutto quello che devi fare è semplicemente controllare se è disponibile un metodo specifico per Bootstrap. Userò modale in questo esempio (funziona per Bootstrap 2-4):

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

Ovviamente non è affidabile al 100% poiché una funzione modale può essere fornita da un plugin diverso, ma comunque farà il suo lavoro ...

Puoi anche controllare Bootstrap 3-4 in modo più specifico (funziona a partire dalla versione 3.1+):

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

Nota che tutti questi controlli richiedono che jQuery sia già caricato .


Grazie! molto utile per caricare bootstrap da cdnjs con un fallback locale
ptim

1
Dovresti usare qualcos'altro oltre a .modal..... Falsi positivi ovunque con quell'esempio.
dhaupin

Sì, sono possibili falsi positivi, questo è vero. Sfortunatamente la maggior parte dei controlli possibili ha un nome abbastanza generico in Bootstrap, quindi è difficile evitare questo problema, ma forse uno più oscuro è scrollspy.noConflict. Quindi controllare che siano presenti sia scrollspy che noConflict potrebbe essere meno soggetto a falsi positivi. Puoi anche combinare diversi controlli diversi per renderlo ancora più affidabile.
Aron

1
Dovrebbe funzionare per la maggior parte, ma stanco di pacchetti che includono plugin jQuery con nomi identici.
Adam F

2
@aron ho provato a usare questo var bootstrap_enabled = (typeof $ (). modal == 'function'); Come usarlo senza jquery? Il mio jquery non è caricato al momento del controllo del bootstrap, quindi mi dà un errore $ undefined.
iit2011081

25

Preferirei controllare un plug-in di bootstrap specifico poiché modale o tooltip sono molto comuni, quindi

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

o

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

funziona in entrambe le versioni bootstrap


Penso che questa sia la risposta migliore e in linea con l'attuale pensiero JavaScript di preoccuparsi del supporto delle funzionalità piuttosto che cercare interi framework.
Phil

5

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

dove [?] sarebbe qualsiasi oggetto o spazio dei nomi definito all'interno del file JS stesso.

Il concetto di "inclusione" non esiste in javascript.


6
Ad esempioif(typeof($.fn.modal) === 'undefined')
Offirmo

5

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

compatibile con la modalità sicura di jQuery,

Il controllo CSS potrebbe richiedere modifiche se si utilizza CSS personalizzato


4

AFAIK, la risposta breve è

Non è possibile rilevare se il bootstrap di Twitter è caricato

Dettagli

Il bootstrap di Twitter è essenzialmente css e un insieme di plugin js per jquery. I nomi dei plugin sono generici come $ .fn.button e anche il set di plugin da utilizzare è personalizzabile. La presenza di plugin solo per nome non aiuterebbe ad accertare che il bootstrap sia presente.


2

Puoi recuperare gli <script>elementi e controllare il loro attributo src ma, come hai sottolineato, quello che stai cercando è il codice stesso e non un nome di file poiché il codice potrebbe essere in qualsiasi file.

Il modo migliore per rilevare se un servizio / classe / ecc. JavaScript. viene caricato in una pagina, è cercare qualcosa nel DOM che sai essere caricato dal JS dato.

Ad esempio per rilevare se jQuery è caricato, puoi fare null !== window.jQueryo per scoprire la versione del jQuery caricato,jQuery.prototype.jquery


0

Trovo che questo sia il modo più semplice per farlo. Per quanto riguarda CSS, non sono sicuro che ci sia un modo semplice per farlo.

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


-3

Se lo digiti nella console, produrrà la versione di jQuery: console.log(jQuery().jquery);

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.