C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 40 を表示中)
■20833 / )  Re[4]: window.openのdependentスタイルについて
□投稿者/ ま (53回)-(2008/06/17(Tue) 22:45:34)
No20809 (hana さん) に返信
> ネタ好きさん、まさん、ご返信ありがとうございます。
> 
> まさん、具体的にコードを書いて頂きまして
> 本当にありがとうございます。
> 
> ただ、私はJavaScriptを全くやったことが無いので
> まさんの書いて頂いたコードの意味が殆ど分かりません。
> 本当に申し訳ありません。
> 
> まさんの書いて頂いたコードを元に
> 色々調べて、理解をしたいと思っております。

やる気があって良かったです。

oya.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD> 
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE></TITLE>
<script>
var oya = {
  push:function(wKo) {
  	alert("この子を [" + wKo + "] 登録すんぞ〜");
     this.arr.push( wKo );
  },
  arr:[],
  closeAll:function() {
  	alert("子を閉じるぞ[" + this.arr.length);
     for (var x=0;x < this.arr.length;x++) {
     	var w = this.arr[x];
     	alert(" この子は " + w + "  微妙かな?");
        if (w && w.closed == false) w.close();
     }
  },
  init:function() {
     var oThis = this;
     window.onbeforeunload = function() {
     	alert("閉じられるぞー");
         oThis.closeAll();
     }
  }
};
window.onload = function() {
	oya.init();
}
</script>

</HEAD>
<BODY>
<input type=button onclick="javascript:window.open('ko.html','ko','width=100,height=100')" value="komado">


</BODY>
</HTML>

ko.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD> 
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE></TITLE>
<script>

window.opener.oya.push( window );

</script>
</HEAD>
<BODY>


</BODY>
</HTML>



> 
> *〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*
> また、自分なりに調べてちょっとやってみたのと
> 同じような処理がありましたのでURLを載せておきます。
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17932&forum=7
> *〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*〜*

全然見当はずれです。


> 
> 【私が実現したいこと】
> @親ウィンドウが閉じられたら子ウィンドウも閉じる
> A親ウィンドウが遷移したら子ウィンドウを閉じる

上に提示したスクリプトが要件としてあっているかと。
詳細は、onbeforeunload イベントを見てください。
JavaScript は、親が子を管理するのは、「子があれば」というときだけで、
新規に開く場合はメンテしなくても良いです。開いた先で親があれば、親
に自分の window オブジェクトを登録する、ってやった方が楽です。

親には子を登録する器だけを用意しておきます。
子には親があれば親の器に自身を設定する記述をしておきます。



> 
> 【作成した処理】
> @については未着手
> 
> Aについて、以下の処理を作成
> →1)子ウィンドウを開く処理部分で、セッションに開いた情報を持たせる
>     --------------------------------------------------------------
>   ある、ボタン押下関数内
>   Session("WinOpen")=True
> 
>   Dim jscript As String
>   jscript &= "<script language=javascript>"
>   jscript &= "window.open('子画面.aspx','Win','height=600,width=400,…省略…');"
>   jscript &= "</script>"
>   Response.Write(jscript)
>   --------------------------------------------------------------

Response.Write() って、<html> の上に描画されちゃいますが良いのですか?
.NET の場合は、RegisterClientScriptBlock ってのと、RegisterStartupScript
ってゆー2つのメソッドを使い分けるそうです。

子窓を開くスクリプトなのに、親画面のページロードでは無さそうな文言ですが・・・

> 
>  2)親ウィンドウの遷移先のPage_Load関数内でSession("WinOpen")がTrueなら
>   子ウィンドウと同じ名前でブランク画面(座標指定で小さい画面)を開き、子ウィンドウを閉じる

子窓は、タイトルバー込みで100*100ドット以下に小さくすることは出来ません。




>  ※上記サイトにも書かれているのですが、親ウィンドウに遷移前に子ウィンドウが閉じられた場合、
>   画面が若干ガチャガチャするのです(読み込み処理のため?)
>   (子ウィンドウが閉じられたという情報を取得したいのですが、方法がわかりません…)

提示したスクリプト例には、子が閉じていなかったら、って判定していますよ。

>   --------------------------------------------------------------
>   親ウィンドウの遷移先のPage_Load関数内
>   If Session("WinOpen")=True Then
>     Dim jscript As String
>     jscript &= "<script language=javascript>"
>     jscript &= "var win = window.open('','Win','height=0,width=0');"
>     jscript &= "win.close();"
>     jscript &= "</script>"
>     Response.Write(jscript)
>     Session("WinOpen")=False
>   End If
>   --------------------------------------------------------------

セッションで窓の開き具合を管理するのは好ましくないかと。
というか、セッション自身が生きている間はこのセッションを作った元ネタである
親窓が開いているわけで。サーバー側で子窓の数まで管理するのはやめた方がよろ
しいと思います。

> 
> Aの処理について最適な方法がありましたら、教えて下さい。
> 長くなってしまったので読むのが億劫かもしれませんが、どうぞよろしくお願い致します。

コメントを入れておいたのでがんばって理解してください。
理解できたら、どのように理解できたのかレスして下さい。
なんか変な書き方ですが、普通に書いたらどーなるのか自分で試してみて下さい。
試した結果を報告して下さい。

返信 編集キー/


管理者用

- Child Tree -