Twitter önyüklemesinin yüklü olup olmadığı nasıl kontrol edilir?


86

Sayfada yüklü bir bootstrap.js olup olmadığını nasıl kontrol edebilirim (bootstrap.js dosyası başka bir büyük JS dosyasında derlenebilir)?

Yanıtlar:


125

Tek yapmanız gereken Bootstrap'e özgü bir yöntemin mevcut olup olmadığını kontrol etmektir. Bu örnekte modal kullanacağım (Bootstrap 2-4 için çalışıyor):

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

Açıkçası% 100 güvenilir değildir, çünkü modsal bir işlev farklı bir eklenti tarafından sağlanabilir, ancak yine de işi yapacak ...

Ayrıca Bootstrap 3-4'ü daha spesifik olarak kontrol edebilirsiniz (3.1+ sürümünden itibaren çalışır):

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

Tüm bu kontrollerin jQuery'nin zaten yüklenmiş olmasını gerektirdiğini unutmayın .


Teşekkürler! yerel bir geri dönüşle cdnj'lerden önyükleme yapmak için çok kullanışlı
ptim

1
Bundan başka bir şey kullanmalısın .modal..... Bu örnekle her yerde yanlış pozitifler.
dhaupin

Evet yanlış pozitifler mümkündür, bu doğrudur. Maalesef, olası denetimlerin çoğu Bootstrap'te oldukça genel bir şekilde adlandırılmıştır, bu nedenle bu sorunu önlemek zordur, ancak belki de daha belirsiz olanı scrollspy.noConflict'tir. Dolayısıyla, hem scrollspy hem de noConflict'in var olup olmadığını kontrol etmek, yanlış pozitiflere daha az eğilimli olabilir. Daha da güvenilir hale getirmek için birkaç farklı kontrolü birleştirebilirsiniz.
Aron

1
Çoğunlukla çalışmalı, ancak aynı adlara sahip jQuery eklentileri içeren paketlerden yorulmalıdır.
Adam F

2
@aron Bu var bootstrap_enabled = (typeof $ (). modal == 'function'); JQuery olmadan nasıl kullanılır? Jquery'im bootstrap'i kontrol ederken yüklenmedi, bu yüzden bana $ undefined hatası veriyor.
iit2011081

25

Modal veya araç ipucu çok yaygın olduğu için belirli bir önyükleme eklentisini kontrol etmeyi tercih ederim.

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

veya

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

her iki önyükleme sürümünde çalışır


Bence bu en iyi cevap ve mevcut JavaScript düşüncesine uygun olarak bütün çerçeveler aramak yerine özellik desteği ile ilgileniyor.
Phil

5

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

burada [?] JS dosyasının içinde tanımlanan herhangi bir nesne veya ad alanı olabilir.

Javascript'te "dahil etme" kavramı yoktur.


6
Örneğinif(typeof($.fn.modal) === 'undefined')
Offirmo

5

Bkz. 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 güvenli mod ile uyumlu,

Özel css kullanıyorsanız css kontrolünde ince ayar yapılması gerekebilir


4

AFAIK, Kısa cevap

Twitter önyüklemesinin yüklenip yüklenmediğini tespit etmek mümkün değil

Detaylar

Twitter bootstrap aslında css ve jquery için js eklentileri kümesidir. Eklenti adları $ .fn.button gibi geneldir ve kullanılacak eklenti seti de özelleştirilebilir. Eklentinin sadece adıyla bulunması, önyüklemenin mevcut olduğunu tespit etmeye yardımcı olmaz.


2

<script>Öğeleri alabilir ve src özniteliklerini kontrol edebilirsiniz, ancak belirttiğiniz gibi, aradığınız şey kodun kendisidir ve kod herhangi bir dosyada olabileceği için bir dosya adı değildir.

Bir JavaScript hizmeti / sınıfı / vb. Olup olmadığını tespit etmenin en iyi yolu. bir sayfaya yüklenir, DOM'da verilen JS tarafından yüklendiğini bildiğiniz bir şey aramaktır.

Örneğin, jQuery'nin yüklü olup olmadığını tespit etmek null !== window.jQueryiçin, yüklenen jQuery'nin sürümünü yapabilir veya öğrenebilirsiniz,jQuery.prototype.jquery


0

Bunu yapmanın en kolay yolunu buluyorum. CSS'ye gelince, bunu yapmanın basit bir yolu olduğundan emin değilim.

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


-3

Bunu konsola yazarsanız, jQuery sürümünü çıkarır: console.log(jQuery().jquery);

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.