teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

2017/09/06 15:12 追記

2017/09/06 06:15

投稿

think49
think49

スコア18194

answer CHANGED
@@ -27,6 +27,8 @@
27
27
  <![endif]-->
28
28
  ```
29
29
 
30
+ **(2017/09/06 15:12 追記)**
31
+
30
32
  ただし、この書き方では条件付きコメントを解釈できない IE10 以降およびIE以外のブラウザでは jQuery が読み込まれないという致命的な問題があります。
31
33
  そこで、これらのブラウザ用に「jQueryが読み込まれなかった時用のコード」を書いて対応します。
32
34
 

5

条件付きコメントを解釈できない IE10 以降およびIE以外のブラウザ用のコード追記

2017/09/06 06:15

投稿

think49
think49

スコア18194

answer CHANGED
@@ -27,6 +27,30 @@
27
27
  <![endif]-->
28
28
  ```
29
29
 
30
+ ただし、この書き方では条件付きコメントを解釈できない IE10 以降およびIE以外のブラウザでは jQuery が読み込まれないという致命的な問題があります。
31
+ そこで、これらのブラウザ用に「jQueryが読み込まれなかった時用のコード」を書いて対応します。
32
+
33
+ ```HTML
34
+ <!--[if lte IE 8]>
35
+ <script type="text/javascript" src="./assets/js/jquery-1.12.4.js"></script>
36
+ <![endif]-->
37
+ <script type="text/javascript">
38
+ 'use strict';
39
+ if (typeof jQuery !== 'function') {
40
+ (function () {
41
+ var script = document.createElement('script');
42
+ script.type = 'text/javascript';
43
+ script.src = './assets/js/jquery-3.2.1.js';
44
+ document.body.appendChild(script);
45
+ }());
46
+ }
47
+ </script>
48
+ ```
49
+
50
+ なお、要件としてはこれで対応できると思いますが、jquery-1.12.4.js, jquery-3.2.1.js のどちらかをDLする仕組みにメリットがあるかについては疑問が残ります。
51
+ IE8, IE11 の両方に対応しなければならない以上、どちらにも存在する機能でコードを書かざるを得ず、jquery-3.2.1.js だけに存在する最深の機能を使うことが出来ません。
52
+ 通常であれば、jquery-1.12.4.js のみをDLする実装で問題はないと思われますので、今一度設計を考え直してみると良いかもしれません。
53
+
30
54
  ### script要素を置く場所
31
55
 
32
56
  `<head>` 内にscript要素を置いているようですが、`</body>` 手前に置くと js ファイル読み込み時のレンダリングブロックがなくなるので、描画速度の高速化に繋がります。

4

<!--\[if gte IE 9\]--> -> <!--\[if gte IE 9\]>

2017/09/06 06:12

投稿

think49
think49

スコア18194

answer CHANGED
@@ -20,11 +20,11 @@
20
20
 
21
21
  ```HTML
22
22
  <!--[if lte IE 8]>
23
- <script type="text/javascript" src="./assets/js/jqyert-1.12.4.js"></script>
23
+ <script type="text/javascript" src="./assets/js/jquery-1.12.4.js"></script>
24
24
  <![endif]-->
25
- <!--[if gte IE 9]-->
25
+ <!--[if gte IE 9]>
26
- <script type="text/javascript" src="./assets/js/jqyert-3.2.1.js"></script>
26
+ <script type="text/javascript" src="./assets/js/jquery-3.2.1.js"></script>
27
- <!--[endif]-->
27
+ <![endif]-->
28
28
  ```
29
29
 
30
30
  ### script要素を置く場所

3

<!\[endif\]-->

2017/09/06 06:07

投稿

think49
think49

スコア18194

answer CHANGED
@@ -21,10 +21,10 @@
21
21
  ```HTML
22
22
  <!--[if lte IE 8]>
23
23
  <script type="text/javascript" src="./assets/js/jqyert-1.12.4.js"></script>
24
- <![end if]-->
24
+ <![endif]-->
25
25
  <!--[if gte IE 9]-->
26
26
  <script type="text/javascript" src="./assets/js/jqyert-3.2.1.js"></script>
27
- <!--[end if]-->
27
+ <!--[endif]-->
28
28
  ```
29
29
 
30
30
  ### script要素を置く場所

2

表現の修正

2017/09/06 05:45

投稿

think49
think49

スコア18194

answer CHANGED
@@ -14,7 +14,7 @@
14
14
  **条件付きコメントの書き方が正しくない**ように思います。
15
15
  このコメントのポイントは、条件付きコメントを解釈できるブラウザ(IE9-)では条件分岐処理が働き、条件付きコメントを解釈できないブラウザ(IE10+, Firefox, Google Chrome 等のモダンブラウザ)では通常のコメントとして扱われるところにあります。
16
16
 
17
- ところが、上記マークアップでは全てコメントとし成立している為、モダンブラウザでは jquery-1.12.4.js, jquery-3.2.1.js の両方がダウンロードされ、jquery-1.12.4.js の実行は jquery-3.2.1.js の実行によって上書き実行されることになります。
17
+ ところが、上記マークアップでは条件文でコメントが閉じられてしまっている為、モダンブラウザでは jquery-1.12.4.js, jquery-3.2.1.js の両方がダウンロードされ、jquery-1.12.4.js の実行は jquery-3.2.1.js の実行によって上書き実行されることになります。
18
18
  **条件付きコメントは IE10 で廃止されました**ので、IE11 でも二重にダウンロード→実行されます。
19
19
  解決する為にはモダンブラウザで読み込んでほしくない部分は、HTMLのコメントの文法が成立する形ででコメントアウトする必要があります。
20
20
 

1

表現の微修正

2017/09/05 08:54

投稿

think49
think49

スコア18194

answer CHANGED
@@ -11,12 +11,11 @@
11
11
  > <!-- [end if] -->
12
12
  > ```
13
13
 
14
- IE9- までサポートされていた条件付きコメントですが、書き方が正しくないように思います。
14
+ **条件付きコメント書き方が正しくない**ように思います。
15
- このコメントのポイントは条件付きコメントを解釈できるブラウザ(IE9-)では条件分岐処理が働き、**条件付きコメントを解釈できないブラウザ(IE10+, Firefox, Google Chrome 等のモダンブラウザ)では通常のコメントとして扱われる**ところにあります。
15
+ このコメントのポイントは条件付きコメントを解釈できるブラウザ(IE9-)では条件分岐処理が働き、条件付きコメントを解釈できないブラウザ(IE10+, Firefox, Google Chrome 等のモダンブラウザ)では通常のコメントとして扱われるところにあります。
16
16
 
17
- ところが、上記マークアップでは全てコメントとして成立している為、モダンブラウザでは jquery-1.12.4.js, jquery-3.2.1.js の両方がダウンロードされ、実行されることになります。
17
+ ところが、上記マークアップでは全てコメントとして成立している為、モダンブラウザでは jquery-1.12.4.js, jquery-3.2.1.js の両方がダウンロードされ、jquery-1.12.4.js の実行は jquery-3.2.1.js の実行によって上書き実行されることになります。
18
- jquery-1.12.4.js の実行は jquery-3.2.1.js の実行によって上書きされるわけですが、jquery-1.12.4.js が余計に実行されてしまっています。
19
- **条件付きコメントは IE10 で廃止されました**ので、IE11 でも同様です。
18
+ **条件付きコメントは IE10 で廃止されました**ので、IE11 でも二重にダウンロード→実行されます。
20
19
  解決する為にはモダンブラウザで読み込んでほしくない部分は、HTMLのコメントの文法が成立する形ででコメントアウトする必要があります。
21
20
 
22
21
  ```HTML