Twitterブートストラップがロードされているかどうかを確認するにはどうすればよいですか?


85

ページにbootstrap.jsがロードされているかどうかを確認するにはどうすればよいですか(ファイルbootstrap.jsは別の大きなJSファイルにコンパイルされる可能性があります)?

回答:


124

あなたがする必要があるのは、ブートストラップ固有の方法が利用可能かどうかを単にチェックすることです。この例ではモーダルを使用します(ブートストラップ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がすでにロードされている必要があることに注意してください。


ありがとう!ローカルフォールバックを使用してcdnjsからブートストラップをロードするのに非常に便利です
ptim 2014年

1
あなたは.modal.....その例で至る所で偽陽性以外のものを使うべきです。
dhaupin 2015

はい、誤検知が発生する可能性があります。これは事実です。残念ながら、ほとんどの可能なチェックはBootstrapでかなり一般的に名前が付けられているため、この問題を回避することは困難ですが、おそらくもっとあいまいなチェックはscrollspy.noConflictです。したがって、scrollspyとnoConflictの両方が存在することを確認すると、誤検知が発生しにくくなります。また、いくつかの異なるチェックを組み合わせて、さらに信頼性を高めることもできます。
アロン

1
ほとんどの部分で機能するはずですが、同じ名前のjQueryプラグインを含むパッケージにうんざりしています。
アダムF

2
@aronこの変数を使用しようとしましたbootstrap_enabled =(typeof $()。modal == 'function'); jqueryなしでそれを使用する方法は?ブートストラップのチェック時にjqueryがロードされていないため、$ undefinedエラーが発生します。
iit2011081 2017年

25

モーダルまたはツールチップが非常に一般的であるため、特定のブートストラッププラグインを確認したいと思います。

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

または

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

両方のブートストラップバージョンで機能します


これが最良の答えであり、現在のJavaScriptに沿っていると思います。フレームワーク全体を探すのではなく、機能のサポートに関心があると考えています。
Phil

5

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

ここで、[?]は、JSファイル自体の内部で定義されているオブジェクトまたは名前空間です。

「含む」という概念はjavascriptには存在しません。


6
if(typeof($.fn.modal) === 'undefined')
Offirmo 2013年

5

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チェックを微調整する必要がある場合があります


4

AFAIK、簡単な答えは

twitterブートストラップがロードされているかどうかを検出することはできません

詳細

Twitterブートストラップは、基本的にcssとjqueryへのjsプラグインのセットです。プラグイン名は$ .fn.buttonのように一般的であり、使用するプラグインのセットもカスタマイズ可能です。名前だけでプラグインが存在しても、ブートストラップが存在することを確認するのに役立ちません。


2

<script>要素を取得してそのsrc属性を確認できますが、ご指摘のとおり、探しているのはコード自体であり、コードはどのファイルにも含まれている可能性があるため、ファイル名ではありません。

JavaScriptサービス/クラスなどかどうかを検出するための最良の方法。ページに読み込まれる、指定されたJSによって読み込まれることがわかっているDOM内の何かを探すことです。

たとえば、jQueryがロードされているかどうかを検出するにnull !== window.jQueryは、ロードされたjQueryのバージョンを実行または確認できます。jQuery.prototype.jquery


0

これが最も簡単な方法だと思います。cssに関しては、それを行う簡単な方法があるかどうかはわかりません。

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


-3

コンソールにこれを入力すると、jQueryバージョンが出力されます。 console.log(jQuery().jquery);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.