[解決済み] インラインのJavascriptを遅延させるには?
質問
以下のようなhtmlコードがあります。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/blazy/1.8.2/blazy.min.js" defer></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js" integrity="sha256-8WqyJLuWKRBVhxXIL1jBDD7SDxU936oZkCnxQbWwJVw=" crossorigin="anonymous" defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.9.0/js/lightbox.min.js" defer></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous" defer></script>
<!-- 26 dec flexslider js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/flexslider/2.6.3/jquery.flexslider.min.js" defer></script>
<script defer>
(function($) {
$(document).ready(function() {
//do something with b-lazy plugin, lightbox plugin and then with flexslider
});
})(jQuery);
</script>
</head>
<body>
</body>
</html>
jQueryが定義されていないというエラーが発生します。今、私のインラインJSコードからdeferを削除しても、jQueryは未定義であると言われます。何らかの理由で、私はjQueryプラグインをhead内に保持し、私のJSコードをインラインに保つ必要があります。私の質問は、次のとおりです。
-
インラインのJavascriptコードは、以下の場合に延期されないのでしょうか?
defer
属性がある場合、インラインの Javascript コードが遅延されるのはなぜですか? -
インラインのJavascriptコードでdeferの動作を真似る方法はありますか?必要であれば、bodyタグの末尾に配置することができます。
どのように解決するのですか?
スクリプトに
defer
属性は指定された順番に読み込まれますが
より前ではなく
の前にロードされることはありません。として
defer
には何の効果もありません。
script
タグには効果がありません。
src
属性がない限り、最初に実行されるスクリプトはインラインスクリプトです。つまり、その時点ではまだjQueryは読み込まれていないのです。
少なくとも2つの方法でこれを解決することができます。
-
インラインスクリプトを
.js
ファイルに記述し、それをsrc
属性で参照します (さらにdefer
属性に加えて)、あるいは -
インラインスクリプトは、ドキュメントと遅延スクリプトがロードされるのを待ちます。その際
DOMContentLoaded
イベントはそれが起こったときに発生します。<script> window.addEventListener('DOMContentLoaded', function() { (function($) { //do something with b-lazy plugin, lightbox plugin and then with flexslider })(jQuery); }); </script>
注意: 後者の場合
$(document).ready(function()
はそれ以上含まれないことに注意してください。それは同じイベントを待つからです (
DOMContentLoaded
). あなたは
ができた
は元のコードと同じようにインクルードできますが、その場合、jQueryはコールバックの
を即座に実行します。
を実行するだけで、実用上の違いはありません。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】スクリプトの読み込みと実行順序について
-
[解決済み] JSのDateからDay名
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?