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

回答編集履歴

2

訂正

2020/02/17 21:31

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -54,7 +54,8 @@
54
54
  <p>長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章</p>
55
55
  </body>
56
56
  ```
57
- 1. イベントリスナの考え方
57
+ 1. イベントリスナの考え方
58
- **on~** 属性は書かず、addEventListener()を使う
58
+ **on~** 属性は書かず、addEventListener()を使う
59
+ イベントリスナを定義できる **on~** 属性は、HTML4時代にインジェクション対象になることも多かった危険な属性という感覚があります。初学者のうちはともかくとして、実装にはイベントリスナ用のAPIを使います。
59
60
  2. URLのフラグメント識別子に対する考え方
60
- URLにフラグメント識別子(#fragmentId)を用いる場合、対象ページの **id 属性**をターゲットにしたほうが良いです。(name属性のもつ一意性は フォーム内のinput[type=radio] や input[type=checkbox] に限って用いるのがHTML4時代からの定石でした)。
61
+ URLにフラグメント識別子(#fragmentId)を用いる場合、対象ページの **id 属性**をターゲットにしたほうが良いです。(name属性のもつ一意性は フォーム内のinput[type=radio] や input[type=checkbox] によって、破綻する可能性があります。フォーム関連操作に限って用いるのがHTML4時代からの定石でした)。

1

追記

2020/02/17 21:31

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -16,4 +16,45 @@
16
16
  とはいえ、フレームが実装されるケースは現存します。
17
17
  (CGIベースで組み込めるルータの設定画面など、LAN環境に特化したサイト)
18
18
 
19
- モダンブラウザは **公開されたWebページの閲覧にターゲットしたHTTPクライアント** のため、コンテンツとなるフレームで作るページには正しい DOCTYPE宣言 の記述が必要になっているかもしれません。
19
+ モダンブラウザは **公開されたWebページの閲覧にターゲットしたHTTPクライアント** のため、コンテンツとなるフレームで作るページには正しい DOCTYPE宣言 の記述が必要になっているかもしれません。
20
+
21
+ # 追記)
22
+ IE,Edge,Chrome,Firefox で確認しました。
23
+
24
+ [up.html](script要素内)
25
+
26
+ ```javascript
27
+ var entryPoint = function() {
28
+ let inputs = document.getElementsByTagName("input");
29
+ for(var i=0,l=inputs.length; i<l; ++i) {
30
+ let btn = inputs[i];
31
+
32
+ // same as button.onclick
33
+ btn.addEventListener("click",function( event ){
34
+ let url = event.target.value;
35
+ window.open(url,"down"); // ご質問での「要件」
36
+ });
37
+ };
38
+
39
+ };
40
+ window.addEventListener("load", entryPoint);
41
+ ```
42
+
43
+ [down.html](name属性はやめ、id属性に変更/headingを利用)
44
+ ```HTML
45
+ <body>
46
+ <h1>フレームセット(下段)</h1>
47
+
48
+ <h2 id="sono1">その1</h2>
49
+ <p><a href="#">その1</a>の内容</p>
50
+ <p>長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章</p>
51
+
52
+ <h2 id="sono2">その2</h2>
53
+ <p><a href="#">その2</a>の内容</p>
54
+ <p>長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章</p>
55
+ </body>
56
+ ```
57
+ 1. イベントリスナへの考え方
58
+ **on~** 属性は書かず、addEventListener()を使う
59
+ 2. URLのフラグメント識別子に対する考え方
60
+ URLにフラグメント識別子(#fragmentId)を用いる場合、対象ページの **id 属性**をターゲットにしたほうが良いです。(name属性のもつ一意性は フォーム内のinput[type=radio] や input[type=checkbox] に限って用いるのがHTML4時代からの定石でした)。