回答編集履歴

4

軽微な変更

2023/12/19 05:28

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36347

test CHANGED
@@ -80,7 +80,7 @@
80
80
  ```
81
81
 
82
82
  実行していただくとわかるのですが、コンソールに表示される数字が前者と後者で異なります。
83
- 言うまでもないですが、DOCTYPE宣言前に余分なコードを追加すると、DOCTYPE宣言が無効になります。どうやら、`window.document.documentElement.clientHeight`は、DOCTYPEによって違う数字を返すのだと思います。
83
+ 言うまでもないですが、DOCTYPE宣言前に余分なコードを追加すると、DOCTYPE宣言が無効になります。どうやら、`window.document.documentElement.clientHeight`は、[後方互換モード](https://developer.mozilla.org/ja/docs/Web/HTML/Quirks_Mode_and_Standards_Mode)だと違う数字を返すのだと思います。
84
84
  同様のことを書いた記事が、ググると見つかりました。
85
85
  [JavaScriptでのページ内スクロールとDOCTYPE宣言でハマった話](https://blog.ver001.com/javascript-clientheight-doctype/)
86
86
 
@@ -90,7 +90,7 @@
90
90
 
91
91
  - ご提示のページのHTML冒頭に余分なコードが含まれてた
92
92
  - HTML冒頭に余分なコードが含まれているとDOCTYPE宣言が無効になる
93
- - DOCTYPEによって`window.document.documentElement.clientHeight`が返すものが違う
93
+ - [後方互換モード](https://developer.mozilla.org/ja/docs/Web/HTML/Quirks_Mode_and_Standards_Mode)だと`window.document.documentElement.clientHeight`が返すものが違う
94
94
  - 問題のコードでは`window.document.documentElement.clientHeight`を参照してた
95
95
 
96
96
  ということです。

3

軽微な誤字訂正

2023/12/19 04:39

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36347

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  ---
34
34
 
35
- さて、「質問に対する回答となっていない投稿」という指摘受けている「HTMLの冒頭にBOMと思われるコードが混入しています。そちらを取り除いてはいかがでしょうか?」という回答ですが、こちらがJavaScriptが想定している結果を返すようになるものであることを示すため、HTMLの冒頭に(BOMだとコピペが困難なので)`0`と記載したテスト用コードを提示します。
35
+ さて、「質問に対する回答となっていない投稿」という指摘受けている「HTMLの冒頭にBOMと思われるコードが混入しています。そちらを取り除いてはいかがでしょうか?」という回答ですが、こちらがJavaScriptが想定している結果を返すようになるものであることを示すため、HTMLの冒頭に(BOMだとコピペが困難なので)`0`と記載したテスト用コードを提示します。
36
36
 
37
37
  ```html
38
38
  0

2

「質問に対する回答となっていない投稿」という指摘を受けたので解説追記

2023/12/19 03:35

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36347

test CHANGED
@@ -1 +1,109 @@
1
- HTMLの冒頭にBOMと思われるコードが混入しています。そちらを取り除いてはいかがでしょうか?
1
+ HTMLの冒頭にBOMと思われるコードが混入しています。そちらを取り除いてはいかがでしょうか?
2
+
3
+ ---
4
+
5
+ ### 「質問に対する回答となっていない投稿」という指摘を受けたので解説追記
6
+
7
+ この質問は「JavaScriptが想定していない結果を返す」というものです。
8
+ ですので、「JavaScriptが想定している結果を返す」ようになる可能性があれば、回答として十分であると考えています。
9
+ この前提が共有できないようであれば、この先は読まなくていいです。
10
+ また、ご質問者の thiashe さんも、読まなくても問題のない内容ですので、どうぞ読み飛ばしてください。
11
+
12
+ ---
13
+
14
+ さて、ご提示のコードのどの部分が想定していないのかを確認したところ、`($win.height() - $msgBox.height()) / 2 + $win.scrollTop()`の部分の結果が異なるようで、この内の`$win.height()`が異なるようでした。
15
+ (なお、`$win = $(window)`です。)
16
+
17
+ ところで、`jQuery.fn.height`のコードを github で確認したところ、以下のようなものでした。
18
+
19
+ ```js
20
+ if ( isWindow( elem ) ) {
21
+
22
+
23
+ // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
24
+ return funcName.indexOf( "outer" ) === 0 ?
25
+ elem[ "inner" + name ] :
26
+ elem.document.documentElement[ "client" + name ];
27
+ }
28
+ ```
29
+ https://github.com/jquery/jquery/blob/c98597eaf5e144ee5e549cb41984687cd1033068/src/dimensions.js#L28C1-L28C1
30
+
31
+ つまり、どうやら、jQueryは`window.document.documentElement.clientHeight`を見ているようでした。
32
+
33
+ ---
34
+
35
+ さて、「質問に対する回答となっていない投稿」という指摘受けている「HTMLの冒頭にBOMと思われるコードが混入しています。そちらを取り除いてはいかがでしょうか?」という回答ですが、こちらがJavaScriptが想定している結果を返す」ようになるものであることを示すため、HTMLの冒頭に(BOMだとコピペが困難なので)`0`と記載したテスト用コードを提示します。
36
+
37
+ ```html
38
+ 0
39
+ <!DOCTYPE html>
40
+ <html lang="ja">
41
+
42
+ <head>
43
+ </head>
44
+
45
+ <body>
46
+ <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
47
+ <script src="https://code.jquery.com/jquery-3.7.1.min.js"
48
+ integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
49
+ <script>
50
+ console.log($(window).height())
51
+ console.log(window.innerHeight)
52
+ console.log(window.document.documentElement.clientHeight)
53
+ </script>
54
+ </body>
55
+
56
+ </html>
57
+ ```
58
+
59
+ ↑こちらが余分なコードを追加したもので、↓こちらが余分なコードがないものです。
60
+
61
+ ```html
62
+ <!DOCTYPE html>
63
+ <html lang="ja">
64
+
65
+ <head>
66
+ </head>
67
+
68
+ <body>
69
+ <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
70
+ <script src="https://code.jquery.com/jquery-3.7.1.min.js"
71
+ integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
72
+ <script>
73
+ console.log($(window).height())
74
+ console.log(window.innerHeight)
75
+ console.log(window.document.documentElement.clientHeight)
76
+ </script>
77
+ </body>
78
+
79
+ </html>
80
+ ```
81
+
82
+ 実行していただくとわかるのですが、コンソールに表示される数字が前者と後者で異なります。
83
+ 言うまでもないですが、DOCTYPE宣言前に余分なコードを追加すると、DOCTYPE宣言が無効になります。どうやら、`window.document.documentElement.clientHeight`は、DOCTYPEによって違う数字を返すのだと思います。
84
+ 同様のことを書いた記事が、ググると見つかりました。
85
+ [JavaScriptでのページ内スクロールとDOCTYPE宣言でハマった話](https://blog.ver001.com/javascript-clientheight-doctype/)
86
+
87
+ ---
88
+
89
+ まとめると、
90
+
91
+ - ご提示のページのHTML冒頭に余分なコードが含まれてた
92
+ - HTML冒頭に余分なコードが含まれているとDOCTYPE宣言が無効になる
93
+ - DOCTYPEによって`window.document.documentElement.clientHeight`が返すものが違う
94
+ - 問題のコードでは`window.document.documentElement.clientHeight`を参照してた
95
+
96
+ ということです。
97
+ 以上から、「JavaScriptが想定している結果を返す」ようになる可能性がある回答であると考えていますし、その可能性があると考えることに十分に合理的な根拠があると考えています。
98
+ ですから、たとえこの対処で問題が解決しなかったとしても、「質問に対する回答となっていない投稿」という指摘には当たらないです。
99
+
100
+ ---
101
+
102
+ 修正依頼をかけた方へ。
103
+ (どうせもう読んでないんだろうけど、万万が一)この追記を読んでいて内容に納得するようであれば、修正依頼を撤回してください。納得できないのであればコメントでお知らせください。
104
+
105
+ ---
106
+
107
+ なお、「最初からそう書いておけばいいじゃん」という意見もあるかもしれませんが、ご質問者はあまりWEB製作経験がある方ではないと判断していましたので、これらのことを書くと冗長すぎると考え、修正内容を提示するのみにとどめました。
108
+
109
+

1

指摘を受けて修正したいので具体的な指摘待ち

2023/12/18 14:14

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36347

test CHANGED
@@ -1 +1 @@
1
- HTMLの冒頭にBOMと思われるコードが混入しています。そちらを取り除いてはいかがでしょうか?
1
+ HTMLの冒頭にBOMと思われるコードが混入しています。そちらを取り除いてはいかがでしょうか?