人に聞けない痔の悩み、これでスッキリ >>

タイトル通り、親ウィンドウと、子ウィンドウがあり、子ウィンドウの「×」でウィンドウを閉じた場合に、親ウィンドウも閉じることはできるのでしょうか。
JavaScriptで「閉じる」ボタンをつけて行うことは、可能なのですが、ウィンドウの「×」はどのように処理したらよいのかわかりません。
ご存知の方がいましたら、よろしくお願いしたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

子ウィンドウに親ウィンドウ側から別のページを読み出したり、あるいは子ウィンドウ内でページを移動・更新したりすることがないのであれば、window.onunloadのイベントを拾って親ウィンドウを閉じる処理を入れておくのが良いのではないかと思います。


window.onunloadは、現在表示されているページが、ページ移動・更新・ウィンドウを閉じる動作などで破棄された時を拾いますので、子ウィンドウを閉じた時に親ウィンドウを閉じるようにもできると思います。
その場合は、子ウィンドウ側のソースに、以下のソースを追加すれば実現できます。

<script type="text/javascript"><!--
function parentclose(){
if (opener){
opener.close();
}
}
window.onunload=parentclose;
//-->
</script>

ただし、先にも書いたように、子ウィンドウを再利用して別のページを読み出したり、あるいは子ウィンドウ内のコンテンツで更新・別ページへの移動ができる場合は、それらの動作を実行された時にも、その現在表示されているページが破棄されたことを検知して親ウィンドウを閉じようとします。 そういった動作を含むサイト設計をしている場合には、この方法は使えないでしょう。
また、親ウィンドウとなるウィンドウがスクリプトなどで開かれたウィンドウではない場合(ユーザーが任意で開いたウィンドウの場合)、IEではそのウィンドウをスクリプトから閉じようとしていることの警告ダイアログが出ますし、Netscape7ではその動作自体をセキュリティエラーとして実行しないようになっています。 状況によっては、実装しても思い通りの動作にならない可能性もあるかもしれません。

参考になれば幸いです。

この回答への補足

ご回答ありがとうございます。
ご回答の中にもございますが、親ウィンドウが閉じられるときに、警告が出てしまいますが、これをなくすことは、可能でしょうか。
もし、ご存知でしたら教えていただけないでしょうか。

補足日時:2004/03/17 14:33
    • good
    • 0

補足読みました。


親ウィンドウを閉じる時に出る警告についてですが、これは閲覧者が任意で開いているウィンドウを閉じようとしている限りは避けられない動作になると思います。 これは、スクリプトの動作により、ユーザの意思に反してブラウザが終了してしまうことを回避するために用意されている機能でしょうし、ブラウザの仕様がそうなっている以上、いかんともしがたいと思われます。

ただ、スクリプトやa要素のtarget指定で開いたウィンドウに関しては、警告を出さずにスクリプトから閉じることができます。
ですので、親ウィンドウを別のページから開く時に、あらかじめ別ウィンドウに開いておくようにすれば、一応警告を出さずに親ウィンドウを閉じることができます。 もし可能でしたら、その親ウィンドウになるページを、そのページを読み出す時に別ウィンドウで開くようにサイトを設計しておくことも、一つの解決策になると思います。

その他の策としては、ちょっと思いつきません… もし上記の方法では目的に適わないという場合は、ごめんなさい。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q子ウインドウを閉じて 親ウインドウを更新

初歩的なことなのかもしれませんが、ご教授いただけると助かります。

やりたい動作は、

親ウインドウから<a href="" target=_blank>で
子ウインドウを開きます。

子ウインドウで処理を行った後、

----ここからの動作がわかりません-----

子ウインドウ上のボタンかアンカータグで

親を再読み込み
子を閉じる
親にフォーカス

こんな動作をJAVASCRIPTで実現可能でしょうか?
結果的に、子が閉じられ、親が再読み込みされた状態でフォーカスがあたるようにできれば最高です。

暇なときでかまいませんので、どうぞよろしくお願いいたします。

Aベストアンサー

こんな感じでいいかと思います
------------------------------
<script type="text/javascript">
<!--
function p_reload(){
var pwin=window.opener;
pwin.location.reload();
pwin.focus();
window.close();
}
//-->
</script>

<button type="button" onclick="p_reload()">親を更新して閉じる</button>

Q子ウィンドウの存在確認

子ウィンドウが開いていない場合にのみ子ウィンドウを開くような下記の処理があるとします。

function OpenSubWindow()
{
if(!w.closed()){
alert('閉じろ!');
}else{
w = window.open("a.html","sub","resizable=no,scrollbars=no");
}
}

この場合、当然のことですが、変数wはelseの中で初めて初期化されるため、ifの条件でオブジェクトが存在しないことによりエラーが発生します。

でも、"sub"というname属性のウィンドウが開いているかどうかを確認したいのですが、どうすればよいのでしょうか?wを初期化する方法が何かあるのでしょうか?それとも、subウィンドウのopen/closeの状態を管理するロジックを作りこまないといけないのでしょうか?

Aベストアンサー

細かなロジックを考える必要はありませんよ。
w がオブジェクトかどうか分からない時点で w.closed を評価するのがマズイだけですから、評価の順番を変えればいいんです。

var w;
function OpenSubWindow() {
  if (!w || w.closed)
    w = window.open("a.html", "sub", "resizable=no,scrollbars=no");
  else
    alert("閉じろ!");
}

ちなみに closed はメソッドではなくプロパティですので、w.closed() ではエラーとなります。
また、既に開いているときの処理は
  w.focus();
とすれば子ウィンドウがアクティブになるのでオススメです。

Q子→親ウインドウへデータを受け渡し、子ウィンドウを閉じる。

このような処理はできないでしょうか?

子ウィンドウはコード番号の検索用。該当のコードのリンクをクリックすると、そのコード番号を親ウィンドウのテキストボックスへ落とし込む。そのタイミングで、子ウィンドウは閉じる。
子→親ウインドウへのデータの受け渡しと、子ウィンドウのクローズを同時に行うようなイメージです。
よろしくお願いします。

Aベストアンサー

こんにちは

【親ウィンドウ】
<form action="xxx.php" method="POST" name="myForm">
顧客コード
<input type="text" name="kokyaku_cd" size="10">
<a href="javascript:void(0)" onClick="window.open('search.html','search','menubar=no,height=400,width=300');">検索</a>
</form>

【子ウィンドウ】
<script language="javascript"><!--
function ich(n) {
window.opener.document.myForm.kokyaku_cd.value=n;
window.close();
}
//--></script>

<table>
<tr>
<th>顧客コード</th>
<th>顧客名称</th>
</tr>
<tr>
<td><a href="javascript:ich('ABC商店')">0001</a></td>
<td>ABC商店</td>
</tr>
<tr>
<td><a href="javascript:ich('DEF商店')">0002</a></td>
<td>DEF商店</td>
</tr>
</table>

もしくはNo.1様の言うようにidを設定して
【親画面】
<input type="text" name="kokyaku_cd" size="10" id="kokyaku_cd">

【子画面 function内】
window.opener.document.getElementById("kokyaku_cd").value=n;

でできると思います

こんにちは

【親ウィンドウ】
<form action="xxx.php" method="POST" name="myForm">
顧客コード
<input type="text" name="kokyaku_cd" size="10">
<a href="javascript:void(0)" onClick="window.open('search.html','search','menubar=no,height=400,width=300');">検索</a>
</form>

【子ウィンドウ】
<script language="javascript"><!--
function ich(n) {
window.opener.document.myForm.kokyaku_cd.value=n;
window.close();
}
//--></script>

<table>
<tr>
<th>顧客コード</th>
<t...続きを読む

Qブラウザの×ボタン(閉じるボタン)押下時のイベントをひろいたい

javaScriptでブラウザの閉じるボタン(×ボタン)を押したときに、functionを走らせたいのですがうまくいきません。onunloadで以下の処理を行っています。


if(event.clientX <= -8980 && event.clientY <= -9000 || event.clientX >= 32700 && event.clientY >= 32700) {
 //ブラウザ閉じられたときの処理
}
閉じるボタンを押してなくても走ってしまったり、不安定なのですが、×ボタン押下時のイベントの拾い方をどなたかご教授ください。よろしくお願いします。

Aベストアンサー

すでにお気づきかも知れませんが、下記URLの掲示板にヒントが載ってました。
WSH利用者さんのソースが、なかなか良いみたいです。

-- 以下、引用 --
function window.onbeforeunload() {
  if(((event.clientX > document.body.clientWidth) && (event.clientY<0)) || event.altKey){
    閉じたときの処理();
  }
}
-- --

参考URL:http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=559017&SiteID=7

Q子ウィンドウを開くときに、親ウィンドウ(自分)を警告なしで閉じる。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=805336
の続きというか、同じことなのですが、
以下のJavaScriptで、子ウィンドウが開かれるのですが、この際に開いた親ウィンドウを閉じたいのですが、普通に閉じると警告が出てしまいます。
警告なしで、子ウィンドウを開き、親ウィンドウを閉じる方法があれば、教えてください。

<script language="JavaScript"><!--
function MenuWindow(){
var bname = navigator.appName;
var bversion = navigator.appVersion;
var spchr = ";";
var bverS = bversion.split(spchr);
var blsr = bverS[1];
var spchr = " ";
var btype = blsr.split(spchr);
var bcat = btype[1], bver = btype[2];
if ((bcat.indexOf("MSIE")<0)||(bver<5.0)) {
res = window.alert("本プログラムは Internet Explore 5.0 以降の"+
"ブラウザ以外では動作しません。");
window.close();
} else {
//location.href="menu.html";
var indexW;
var swidth=screen.availWidth;
var sheight=screen.availHeight;
var wwidth=swidth*1.0;
var leftpos=(swidth-wwidth);
var wheight=sheight*1.0;
var toppos=(sheight-wheight);
window.resizeTo(wwidth,wheight);
window.moveTo(leftpos,toppos);
window.focus();
indexW = window.open("menu.html","",'resizable=yes,top=0,left=0');
indexW.resizeTo(swidth, sheight);

//location.href="#";
}
return true;
}
//--></script>
</head>
<body onLoad="MenuWindow()">

</body>

http://oshiete1.goo.ne.jp/kotaeru.php3?q=805336
の続きというか、同じことなのですが、
以下のJavaScriptで、子ウィンドウが開かれるのですが、この際に開いた親ウィンドウを閉じたいのですが、普通に閉じると警告が出てしまいます。
警告なしで、子ウィンドウを開き、親ウィンドウを閉じる方法があれば、教えてください。

<script language="JavaScript"><!--
function MenuWindow(){
var bname = navigator.appName;
var bversion = navigator.appVersion;
var spchr = ";";
var bverS = bversio...続きを読む

Aベストアンサー

window.open() で開かれたウィンドウじゃないウィンドウを window.close() しようとすると、警告が出ます。

実は、これには穴があって...

> window.close();

の箇所を、以下のようにちょっとおまじないを入れると

  w = window.open("","_top")
  w.opener = window
  w.close()


ね、ブラウザは、勘違いしちゃうんですよね。

Q子画面を自動で閉じた後、親画面を再描画するJavaScriptが・・・・

IEだと動くんですけど、Netscapeだと動かないんです。なんかsecurityErrorが出まして・・・。子画面を閉じるまでは動いてるんですが、親の再描画の部分でエラーが出てるようです。どこが原因かお分かりになる方いらっしゃいますか?よろしくお願いします。


<%//処理を何秒後に行うか 時間をset%>
function setTimer(){
timer1=setTimeout("clo()",3000);
timer2=setTimeout("location()",3000);
}

<%//windowをclose%>
function clo(){
window.close();
}

<%//親画面を再描画する%>
function location(){
var url='<html:rewrite page="/hogehoge/hoge.do" />';
window.opener.location.href = url+'?member_id='+変数;
}

Aベストアンサー

あれ?
でも一字一句同じurlを読み込めば再検索されると思いましたが・・・
↑これは余計でした。
えー、親画面の再描画を先にすると動かないそうですね。
でしたら、親画面のほうで子画面を閉じて渡された引数をurlに組み込んで再描画するようにしましょう。
子画面の処理は子画面で、親画面の処理は親画面で行うわけです。
まず、親画面となるhtmlに以下を足します。
<script type="text/javascript">
<!--
function redraw(num){
location.href='<html:rewrite page="/hogehoge/hoge.do" />?member_id='+num;
}

function location(number){
timer2=setTimeout("redraw("+number+")",3000);
}
//-->
</script>
そして、あなたの子画面のsetTimer()を
setTimer(){
timer1=setTimeout("clo()",3000);
opener.location(変数);
}
にします。
これで、子画面は自分を閉じるためだけにタイマーを持っているので、タイムラグが生じても問題なく動作するはずです。

あれ?
でも一字一句同じurlを読み込めば再検索されると思いましたが・・・
↑これは余計でした。
えー、親画面の再描画を先にすると動かないそうですね。
でしたら、親画面のほうで子画面を閉じて渡された引数をurlに組み込んで再描画するようにしましょう。
子画面の処理は子画面で、親画面の処理は親画面で行うわけです。
まず、親画面となるhtmlに以下を足します。
<script type="text/javascript">
<!--
function redraw(num){
location.href='<html:rewrite page="/hogehoge/hoge.do" />?member_id...続きを読む

Q親ウィンドウから開いた子ウィンドウをまとめて閉じるには?

親ウィンドウから複数のサブウィンドウを開いたとします。親ウィンドウを閉じる際に、開いているサブウィンドウを全て閉じたいと思っています。

開いたサブウィンドウのwindowオブジェクトを控えておいて、親ウィンドウのunloadで順番に閉じていけばできますが、イマイチかっこいい処理ではないので、一括してcloseできる処理を考えているところです。

なにかいい方法はないでしょうか?

Aベストアンサー

親ウィンドウが開いた子ウィンドウを一括で閉じるには、
子ウィンドウの一覧を把握していなくてはなりません。

ですが、いちいち子ウィンドウの変数を作成していくのは
面倒極まりないので、以下の手順で一括処理を行えます。

0)グローバル変数で、配列を宣言する

******ここは複数回の可能性あり*******
1)子ウィンドウを開く
2)子ウィンドウハンドルを配列に入れる
***********************************

onUnload時
1)子ウィンドウハンドルを参照し、閉じられていないかチェック
2)子ウィンドウハンドルに対して close()メソッドを実行


一応、IE5上で動作確認したソースもあるのですが、
ご自分でお考えになる方が力になりますので。
どうしてもできないと言う時は、改めてソースを開示いたしましょう。

Q画面間でのJavaScriptでの値の受け渡しについて

お世話になります。

画面(ASPで作成した画面)間でのJavaScript同士の値の受け渡しは出来るのでしょうか。

画面1から画面2を開き、画面2のJavaScriptの関数内で画面1のJavaScriptの値を変えると言った事は出来るのでしょうか。

何方かご存知でしたら、お教え下さい。
宜しくお願い致します。

Aベストアンサー

IEとFireFoxで試してみましたけど、できそうですね。
tes1.htmlからtes2.htmlを開いた場合のソースです。
関数はボタンとかから適当に呼んでください。

// tes1.htmlのJavaScript
var value=0;
function msg () {
alert(value);
}
function openWnd () {
wnd = window.open("tes2.html");
}

// tes2.htmlのJavaScript
function count () {
opener.value++; // openerが親元
alert(opener.value);
}

Qブラウザの右上にあるボタンを消すには?

IEを使用しています。
ブラウザの右上にある、閉じる、最大、最小ボタンを消したいのですが、どうすれば良いでしょうか?
ご存じの方は、どうぞ教えていただけませんでしょうか。

Aベストアンサー

なるほど、特定の用途に限定した方策を模索中なのですね。

これは、通常のWebSiteでは、禁じ手とも言える、ユーザからの大顰蹙を買う手法ですが、JavaScriptでフルスクリーン表示させることで実装可能ですね。

表示はWin環境のIE4以上限定でのフルスクリーン表示となります。
それ以外の環境では正しく表示されません。

注意点としては、ウインドウのクローズアクションをボタンなどでナビゲーションしなければ、Altキー+F4キー以外ではウインドウをクローズ出来なくなります。
そのため、使いようによっては、ユーザビリティーを無視した劣悪サイトとも成りかねませんので、一般的なサイト構築には100%お勧め致しません。

まずは、以下の2枚のソースをエディタにCopy&Pasteして、動作チェックしてみて下さい。
その後、ご自分でアレンジして下さい。


リンク元、a.htmlの記述例・・

<html>
<head>
<title>a</title>
<script type="text/javascript">
<!--
function full_screen()
{
window.open("b.html","", "fullscreen=yes");
}
//-->
</script>
</head>
<body>
<a href="#" onclick="full_screen()">b.htmlをフルスクリーン表示</a>
</body>
</html>


リンク先、b.htmlの記述例・・

<html>
<head>
<title>b</title>
</head>
<body>
<form>
<input type="button" name="close" value="ウインドウを閉じる" onClick="window.close()">
</form>
</body>
</html>

なるほど、特定の用途に限定した方策を模索中なのですね。

これは、通常のWebSiteでは、禁じ手とも言える、ユーザからの大顰蹙を買う手法ですが、JavaScriptでフルスクリーン表示させることで実装可能ですね。

表示はWin環境のIE4以上限定でのフルスクリーン表示となります。
それ以外の環境では正しく表示されません。

注意点としては、ウインドウのクローズアクションをボタンなどでナビゲーションしなければ、Altキー+F4キー以外ではウインドウをクローズ出来なくなります。
そのため、使いように...続きを読む

Q子ウィンドウから親ウィンドウを閉じる方法

http://www.tagindex.com/javascript/window/sub_to_main.html

こちらのように子ウィンドウから親ウィンドウを操作していますが
子ウィンドウから親ウィンドウを閉じて、子ウィンドウだけ残す方法がありましたら、教えて下さい。

よろしくお願いします。

Aベストアンサー

できます。

親ウィンドウの方のHTMLの子ウィンドウを表示スクリプトの中に
window.opener="main";
を記述してください。

これで子ウィンドウを表示後に子ウィンドウから
window.opener.close();
で親ウィンドウを閉じると、警告メッセージを表示せず閉じてくれます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング