回答編集履歴

2

訂正

2020/02/17 21:31

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

test CHANGED
@@ -110,10 +110,12 @@
110
110
 
111
111
  ```
112
112
 
113
- 1. イベントリスナの考え方
113
+ 1. イベントリスナの考え方
114
114
 
115
- **on~** 属性は書かず、addEventListener()を使う
115
+ **on~** 属性は書かず、addEventListener()を使う
116
+
117
+ イベントリスナを定義できる **on~** 属性は、HTML4時代にインジェクション対象になることも多かった危険な属性という感覚があります。初学者のうちはともかくとして、実装にはイベントリスナ用のAPIを使います。
116
118
 
117
119
  2. URLのフラグメント識別子に対する考え方
118
120
 
119
- URLにフラグメント識別子(#fragmentId)を用いる場合、対象ページの **id 属性**をターゲットにしたほうが良いです。(name属性のもつ一意性は フォーム内のinput[type=radio] や input[type=checkbox] に限って用いるのがHTML4時代からの定石でした)。
121
+ URLにフラグメント識別子(#fragmentId)を用いる場合、対象ページの **id 属性**をターゲットにしたほうが良いです。(name属性のもつ一意性は フォーム内のinput[type=radio] や input[type=checkbox] によって、破綻する可能性があります。フォーム関連操作に限って用いるのがHTML4時代からの定石でした)。

1

追記

2020/02/17 21:31

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

test CHANGED
@@ -35,3 +35,85 @@
35
35
 
36
36
 
37
37
  モダンブラウザは **公開されたWebページの閲覧にターゲットしたHTTPクライアント** のため、コンテンツとなるフレームで作るページには正しい DOCTYPE宣言 の記述が必要になっているかもしれません。
38
+
39
+
40
+
41
+ # 追記)
42
+
43
+ IE,Edge,Chrome,Firefox で確認しました。
44
+
45
+
46
+
47
+ [up.html](script要素内)
48
+
49
+
50
+
51
+ ```javascript
52
+
53
+ var entryPoint = function() {
54
+
55
+ let inputs = document.getElementsByTagName("input");
56
+
57
+ for(var i=0,l=inputs.length; i<l; ++i) {
58
+
59
+ let btn = inputs[i];
60
+
61
+
62
+
63
+ // same as button.onclick
64
+
65
+ btn.addEventListener("click",function( event ){
66
+
67
+ let url = event.target.value;
68
+
69
+ window.open(url,"down"); // ご質問での「要件」
70
+
71
+ });
72
+
73
+ };
74
+
75
+
76
+
77
+ };
78
+
79
+ window.addEventListener("load", entryPoint);
80
+
81
+ ```
82
+
83
+
84
+
85
+ [down.html](name属性はやめ、id属性に変更/headingを利用)
86
+
87
+ ```HTML
88
+
89
+ <body>
90
+
91
+ <h1>フレームセット(下段)</h1>
92
+
93
+
94
+
95
+ <h2 id="sono1">その1</h2>
96
+
97
+ <p><a href="#">その1</a>の内容</p>
98
+
99
+ <p>長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章</p>
100
+
101
+
102
+
103
+ <h2 id="sono2">その2</h2>
104
+
105
+ <p><a href="#">その2</a>の内容</p>
106
+
107
+ <p>長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章長い文章</p>
108
+
109
+ </body>
110
+
111
+ ```
112
+
113
+ 1. イベントリスナへの考え方
114
+
115
+ **on~** 属性は書かず、addEventListener()を使う
116
+
117
+ 2. URLのフラグメント識別子に対する考え方
118
+
119
+ URLにフラグメント識別子(#fragmentId)を用いる場合、対象ページの **id 属性**をターゲットにしたほうが良いです。(name属性のもつ一意性は フォーム内のinput[type=radio] や input[type=checkbox] に限って用いるのがHTML4時代からの定石でした)。