- PR -

親子ウィンドウの画面Close操作について

1
投稿者投稿内容
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-05-12 16:07
使用言語:ASP.NET(VB.NET)
OS:Windows2000
ブラウザ:IE5.5以上

こんにちは。以下のことで悩んでおります。

親ウィンドウから子ウィンドウを開きます。
開いた子ウィンドウでボタン押下後に、以下の一連の動作を行いたいと思っています。
1.子で入力した値を親のテキストボックスに値を反映
2.子画面を閉じる
3.親のjavascriptを動かす

私の組んだプログラムだと
親のjavascript処理が完了された後に子画面が閉じるようになってしまいます。
---現在のプログラム---
子側ボタン押下時script
 function sub1{
  window.opener.Form1.textbox.value = "test";
  window.opener.owner1();
 }
親側呼出しscript
 function owner1(){
  subWin.close(); ←子ウィンドウクローズ(var subWin = window.open(〜〜〜) と宣言したものを閉じる)
  alert(document.Form1.textbox.value);
 }
----------------------
同じようなパターンで子側で閉じるなど試したのですがどれも同じ結果です。
親(もしくは子)の関数が完了するまでは画面が閉じないようなので根本的に私のものは間違っているようです。

処理量軽減の為にクライアント側(javascript)だけで行いたいと思っています。
何か良い方法がありましたらご教授ください。
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-05-13 01:07
とりあえず、
『subWin.close();』
  ↓
『setTimeout("subWin.close();", 0);』
とすると期待通りの動作になるようです。

なぜ関数が完了するまで画面が閉じないのか、
なぜ上記の記述だと画面が閉じるのかはわかりません。

どなたか理由をご存じの方がいたら、私も知りたいです。
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-05-13 10:37
Heさん、返答ありがとうございます。
こちらで試したところ、やはり関数が終わるまで子画面が閉じませんでした。
Heさんの作りと何が違うのか教えていただけますでしょうか。


親画面にはWebテキストボックスとHTMLボタン、
子画面にはWebテキストボックスとWebボタンのみの簡易な作りです。

以下に親画面のscriptを記述します。
 var subWin;
 function OpenWin(){
  var features = "fullscreen=1";
  var Str = "WebPopup.aspx"
  subWin = window.open(Str,'',features);
 }
 function owner1(){
  setTimeout("subWin.close();", 0);
  alert(document.Form1.textbox.value);
 }
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-05-14 01:07
> Heさんの作りと何が違うのか教えていただけますでしょうか。
↓ここですね。
var features = "fullscreen=1";
確かに、フルスクリーンで開くと子画面が閉じないことがありますね。(※)

↓こうしてみました。こちらの環境ではこれで期待通りの動きをします。
setTimeout("subWin.close();alert(〜〜);", 0);

上記だとちょっとキモチワルイので、↓でどうでしょう?
コード:

setTimeout(Sample, 0);

function Sample(){
subWin.close();
alert(〜〜);
}



※ 「閉じないことが」と書いたのは、会社のマシンと自宅のマシンで挙動が違ったからです。
  ブラウザは同じ(IE6)なので、何か別の要因があるようですが、わかりません。
  # マシンの処理速度かなぁ。。。 速いマシンだと、閉じる?

# 以下、追記。
きちさんご提示のソースだと、
『document.Form1.textbox.value』の部分でエラーとなりますが、
単なる記述ミスですよね?


[ メッセージ編集済み 編集者: He 編集日時 2004-05-14 01:39 ]
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-05-14 10:47
Heさん、ありがとうございます。
Heさんから教えていただいた以下のコードで行ったところ期待通りの動きが出来ました。
引用:

setTimeout(Sample, 0);

function Sample(){
subWin.close();
alert(〜〜);
}


この部分以外は変えていないので、何故こちらの環境で動かなかったのかは分かりませんでした。

引用:

『document.Form1.textbox.value』の部分でエラーとなりますが、
単なる記述ミスですよね?


こちらでは問題なく動いています。通常掲示板に書くときは一般的な『TextBox1』と書くところを名前を設定した状態の『textbox』で記述してしまったのが原因かと思います。

-----
「それをshowModalDialogで行いたい」とか言われてshowModalDialogについて調査することになりました。

当初の質問はHeさんのおかげで解決することが出来ました。ありがとうございました。
1

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