- PR -

javascriptでwindow.openした時に起こる事象

投稿者投稿内容
復活したスライム
常連さん
会議室デビュー日: 2006/06/26
投稿数: 28
投稿日時: 2008-06-06 15:39
お世話になります。

 javascriptで子フレームを開いた後、親フレームを閉じようとすると、別の空の子フレームが一瞬表示されるので困っています。
 下記に詳細を記しますので、どなたか解決方法をご存知の方がおられましたらご教示願います。

 @親フレームから下記によって新しいブラウザを開き、そこに子フレームを表示します。

WK_HTML = "<script language='JavaScript'>"
WK_HTML = WK_HTML & " window.open('','apfms','width=1,height=1,scrollbars=yes,top=10,left=10');"
WK_HTML = WK_HTML & " document.fms.target = 'apfms';"
WK_HTML = WK_HTML & " document.fms.action = '" & Path & "';"
WK_HTML = WK_HTML & " document.fms.method='POST';"
WK_HTML = WK_HTML & " document.fms.submit() ;"
WK_HTML = WK_HTML & " </script>"
Response.Write(WK_HTML)

 A子フレームはある処理をおこなうと、自動的に閉じます.
WK_HTML = "<script language='JavaScript'>"
WK_HTML = WK_HTML & " (window.open('', '_self').opener = window).close();"
WK_HTML = WK_HTML & " </script>"
Response.Write(WK_HTML)

 B親フレームを@Aの後で閉じようとすると、なぜか空の子フレームを一瞬表示してしまいます。

<BUTTON TYPE='submit' onClick="window.close()">閉じる</BUTTON>

 ※@Aを実行しなければ、空の子フレームを表示することなく通常どおり親フレームを閉じることができます。

 
 この空の子フレームを表示しないようにするにはどうしたらいいでしょうか。

 以上、よろしくお願いいたします.
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-06-07 02:17
2回!!


開いてる。


# (window.open('', '_self').opener = window).close();
2行を1行で書きたいっていう意図はわかるが、、、、紛らわしいし、
今回の君の悩みがコレだし。こんなトリッキーなコード書くから変な
ところで躓くのではないかと考えます。

# opener = window
これ、VistaのIE7 では直っていますよ。
だからこれに頼った実装は今のうちから避けた方が無難です。




[ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-06-07 02:25 ]
復活したスライム
常連さん
会議室デビュー日: 2006/06/26
投稿数: 28
投稿日時: 2008-06-09 10:14
ぴあちゃん様

 お世話になります。
 いつもご教示、有難うございます。

 ご指摘の箇所を以下の通り修正しましたが、
 やはり同一の事象が発生してしまいます。

 (window.open('', '_self')).close();
 window.close();

 これはIE6でも7でも発生するのですが、何か対処法がございませんでしょうか。

 以上です。
 
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2008-06-09 10:43
とりあえず、javaのフォーラムにjavascriptの質問投げるのはやめようよ。
(答える人も)
引用:

復活したスライムさんの書き込み (2008-06-09 10:14) より:
 (window.open('', '_self')).close();
 window.close();


その前のレスに「こんなトリッキーなコード書くから変なところで躓くのではないかと考えます。」と言われたのに、なぜ直さないのかな?

# 何を言ってもムダな人なのかね?
復活したスライム
常連さん
会議室デビュー日: 2006/06/26
投稿数: 28
投稿日時: 2008-06-09 10:52
冬寂様

 ご返信、有難うございます。

 すみません、訂正いたします。
 下記2パターンを試しましたが、
 やはり同一事象が発生してしまいます。

 @(window.open('', '_self')).close();
 Awindow.close();

 Aはトリッキーな記述ではないと思われるのですが、
 事象が発生してしまいます。

 javaの掲示板ということで、次回の投稿から気をつけます。
 ご迷惑をおかけします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-06-09 11:23
JavaScriptならまだしも、サーバサイドのコードはASP・・・
どこがJavaなのかと。

・ミニマムコードを書くこと。
・適切な場所で相談すること。

これが大切かと。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-06-09 11:40
最後のレスです。

質問です。必ず答えてください。
  window.open って何するのですか?


>WK_HTML = WK_HTML & " window.open
>('','apfms','width=1,height=1,scrollbars=yes,top=10,left=10');"

ここで1回開いて、

>(window.open('', '_self').opener = window).close();
ここで1回開いて、すぐに閉じています。一瞬表示されるのは何故なのか
分かりましたか?

>window.close();
ここで最初に開いた窓を閉じています。

理解できてないどこかで拾ってきたコードをコピペ利用するのはやめましょう。


# JavaとJavaScriptは違う、とのご指摘です。
# 上記で理解できない場合は掲示板自体を変えた方がよろしいかと思います。



復活したスライム
常連さん
会議室デビュー日: 2006/06/26
投稿数: 28
投稿日時: 2008-06-09 12:07
ぴあちゃん様、かつのり様

 ご迷惑をおかけいたしました。
 内容がjavascriptだったし、
 わかりづらく記述してしまって、
 混乱させてしまったことと思います。
 
>質問です。必ず答えてください。
>  window.open って何するのですか?

 新しいwindow画面(子画面)を開きます。

>>WK_HTML = WK_HTML & " window.open
>>('','apfms','width=1,height=1,scrollbars=yes,top=10,left=10');"

>ここで1回開いて、

 そうです、ここで一回子画面を開きます。

>>(window.open('', '_self').opener = window).close();
>ここで1回開いて、すぐに閉じています。一瞬表示されるのは何故なのか
>分かりましたか?

 この命令は、子画面の中の記述です。
 子画面をクローズしています。
 ここは問題なく子画面をクローズしています。
 この時点では、一瞬開くということはないのです。
 一応ここの記述を
 window.close();
 に変更しました。

>>window.close();
>ここで最初に開いた窓を閉じています。

 そしてこれは、親画面の閉じるボタンです。
 この閉じるボタンを押下すると、先ほど閉じたはずの子画面が
 一瞬立ち上がるのです。

 ご迷惑をおかけいたしました。
 これは自分で解決したいと思います。

 以上です。

スキルアップ/キャリアアップ(JOB@IT)