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:
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 .
.modal..... Falsi positivi ovunque con quell'esempio.
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
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
AFAIK, la risposta breve è
Non è possibile rilevare se il bootstrap di Twitter è caricato
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.
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
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>
Aggiungi il link bootstrap e osserva la modifica nel tag h1.