回答編集履歴
2
誤字訂正
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
> 別ウィンドウは全てこの値で無限に開こうとしています
|
1
|
+
> nameは、”subwin” で、別ウィンドウは全てこの値で無限に開こうとしています。
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
// 呼び出し元が閉じようとしたら、サブウィンドウを強制的に閉じる
|
33
|
+
// 呼び出し元が閉じようとしたら、サブウィンドウを強制的に閉じる実装例
|
34
34
|
|
35
35
|
window.addEventListener("beforeunload", function(){
|
36
36
|
|
@@ -54,6 +54,16 @@
|
|
54
54
|
|
55
55
|
|
56
56
|
|
57
|
-
|
57
|
+
仕様上、②を実現するには、別名を与える必要があります。
|
58
58
|
|
59
|
-
第二引数に与える name はidに置き換えて
|
59
|
+
第二引数に与える name はsubwinIdなどに置き換えて自動生成して管理し、共通するイベントハンドラもアタッチするよう、(class ブロックを用いるなどの)オブジェクトとして設計するのが望ましいです。
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
> nameを”_blank”に変えてみたところ
|
64
|
+
|
65
|
+
安易に "_blank" を使う前に、開いた「サブウィンドウをどのように制御すべきか」を考えてください。
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
※ご質問が「単純に開けばOK」という内容ではなさそうでしたので、方法論を述べさせていただきました。
|
1
コード追記
test
CHANGED
@@ -3,3 +3,57 @@
|
|
3
3
|
|
4
4
|
|
5
5
|
閉じる原因ですね。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
window.open() を使う場合、利用者の利便を考えたイベントハンドラを設計することが重要。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
基本:
|
14
|
+
|
15
|
+
```javascript
|
16
|
+
|
17
|
+
const subwins = {};
|
18
|
+
|
19
|
+
const openSubWindow = ( url, name ) => {
|
20
|
+
|
21
|
+
if(!subwins[name]) {
|
22
|
+
|
23
|
+
// サブウィンドウのインスタンスを管理
|
24
|
+
|
25
|
+
subwins[name] = window.open( url, name );
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
// 制御用イベントハンドラは必ず設計する。
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
// 呼び出し元が閉じようとしたら、サブウィンドウを強制的に閉じるなど。
|
34
|
+
|
35
|
+
window.addEventListener("beforeunload", function(){
|
36
|
+
|
37
|
+
subwins[name].close();
|
38
|
+
|
39
|
+
});
|
40
|
+
|
41
|
+
}
|
42
|
+
|
43
|
+
}
|
44
|
+
|
45
|
+
```
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
> ①そのユーザIDに、old_idが存在した場合、そのold_idの詳細情報を別ウィンドウで表示させる。
|
50
|
+
|
51
|
+
②そのold_idにさらにold_idがあった場合、さらに新しく別ウィンドウで表示させる。
|
52
|
+
|
53
|
+
③以下、old_idが存在しなくなるまで(理論上は)無限に別ウィンドウを開き続ける。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
使用上、②を実現するには、別名を与える必要があります。
|
58
|
+
|
59
|
+
第二引数に与える name はidに置き換えて、自動でID生成して管理し、共通するイベントハンドラもアタッチするよう、class ブロックを用いるなど、オブジェクトとして設計するのが望ましいです。
|