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

回答編集履歴

2

誤字訂正

2019/12/24 02:38

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -1,4 +1,4 @@
1
- > 別ウィンドウは全てこの値で無限に開こうとしています
1
+ > nameは、”subwin” で、別ウィンドウは全てこの値で無限に開こうとしています
2
2
 
3
3
  閉じる原因ですね。
4
4
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  // 制御用イベントハンドラは必ず設計する。
16
16
 
17
- // 呼び出し元が閉じようとしたら、サブウィンドウを強制的に閉じるなど。
17
+ // 呼び出し元が閉じようとしたら、サブウィンドウを強制的に閉じる実装例
18
18
  window.addEventListener("beforeunload", function(){
19
19
  subwins[name].close();
20
20
  });
@@ -26,5 +26,10 @@
26
26
  ②そのold_idにさらにold_idがあった場合、さらに新しく別ウィンドウで表示させる。
27
27
  ③以下、old_idが存在しなくなるまで(理論上は)無限に別ウィンドウを開き続ける。
28
28
 
29
- 使用上、②を実現するには、別名を与える必要があります。
29
+ 仕様上、②を実現するには、別名を与える必要があります。
30
- 第二引数に与える name はidに置き換えて自動でID生成して管理し、共通するイベントハンドラもアタッチするよう、class ブロックを用いるなどオブジェクトとして設計するのが望ましいです。
30
+ 第二引数に与える name はsubwinIdなどに置き換えて自動生成して管理し、共通するイベントハンドラもアタッチするよう、class ブロックを用いるなどの)オブジェクトとして設計するのが望ましいです。
31
+
32
+ > nameを”_blank”に変えてみたところ
33
+ 安易に "_blank" を使う前に、開いた「サブウィンドウをどのように制御すべきか」を考えてください。
34
+
35
+ ※ご質問が「単純に開けばOK」という内容ではなさそうでしたので、方法論を述べさせていただきました。

1

コード追記

2019/12/24 02:38

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -1,3 +1,30 @@
1
1
  > 別ウィンドウは全てこの値で無限に開こうとしています
2
2
 
3
- 閉じる原因ですね。
3
+ 閉じる原因ですね。
4
+
5
+ window.open() を使う場合、利用者の利便を考えたイベントハンドラを設計することが重要。
6
+
7
+ 基本:
8
+ ```javascript
9
+ const subwins = {};
10
+ const openSubWindow = ( url, name ) => {
11
+ if(!subwins[name]) {
12
+ // サブウィンドウのインスタンスを管理
13
+ subwins[name] = window.open( url, name );
14
+
15
+ // 制御用イベントハンドラは必ず設計する。
16
+
17
+ // 呼び出し元が閉じようとしたら、サブウィンドウを強制的に閉じるなど。
18
+ window.addEventListener("beforeunload", function(){
19
+ subwins[name].close();
20
+ });
21
+ }
22
+ }
23
+ ```
24
+
25
+ > ①そのユーザIDに、old_idが存在した場合、そのold_idの詳細情報を別ウィンドウで表示させる。
26
+ ②そのold_idにさらにold_idがあった場合、さらに新しく別ウィンドウで表示させる。
27
+ ③以下、old_idが存在しなくなるまで(理論上は)無限に別ウィンドウを開き続ける。
28
+
29
+ 使用上、②を実現するには、別名を与える必要があります。
30
+ 第二引数に与える name はidに置き換えて、自動でID生成して管理し、共通するイベントハンドラもアタッチするよう、class ブロックを用いるなど、オブジェクトとして設計するのが望ましいです。