ページにbootstrap.jsがロードされているかどうかを確認するにはどうすればよいですか(ファイルbootstrap.jsは別の大きなJSファイルにコンパイルされる可能性があります)?
回答:
あなたがする必要があるのは、ブートストラップ固有の方法が利用可能かどうかを単にチェックすることです。この例ではモーダルを使用します(ブートストラップ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がすでにロードされている必要があることに注意してください。
.modal
.....その例で至る所で偽陽性以外のものを使うべきです。
if (typeof([?])=='undefined') { /*bootstrap is not loaded */}
ここで、[?]は、JSファイル自体の内部で定義されているオブジェクトまたは名前空間です。
「含む」という概念はjavascriptには存在しません。
if(typeof($.fn.modal) === 'undefined')
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チェックを微調整する必要がある場合があります
<script>
要素を取得してそのsrc属性を確認できますが、ご指摘のとおり、探しているのはコード自体であり、コードはどのファイルにも含まれている可能性があるため、ファイル名ではありません。
JavaScriptサービス/クラスなどかどうかを検出するための最良の方法。ページに読み込まれる、指定されたJSによって読み込まれることがわかっているDOM内の何かを探すことです。
たとえば、jQueryがロードされているかどうかを検出するにnull !== window.jQuery
は、ロードされたjQueryのバージョンを実行または確認できます。jQuery.prototype.jquery
ブートストラップリンクを追加し、h1タグの変更に注目してください。