- PR -

javascriptでの"window.close"処理の件について

投稿者投稿内容
いのき
ベテラン
会議室デビュー日: 2005/10/06
投稿数: 88
投稿日時: 2005-12-19 13:18
いつもお世話になります。いのきです。

javascriptで質問があります。

処理中に「window.open」等で開いた画面に対して「window.close」を行っても問題ないのですが、
デスクトップやスタートにある「Internet Explorer」をクリックして開いた画面に対して、
「window.close」を行うと、下記の確認メッセージが出力されます。

**** メッセージ ****
ウィンドウは、表示中のWebページにより閉じられようとしています。
このウィンドウを閉じますか?
********************

これは何故このような現象が発生するのでしょうか?
また、この問題の対策はあるのでしょうか?

尚、環境はWindows XP(SP2)でIE6.0のブラウザを使用しています。

以上、お忙しいところ申し訳ありませんが、ご教授をお願い致します。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-12-19 13:24
こんにちは、でっちです。

なぜかは存じません。
通常のアプリにもある終了確認ですかね?

回避方法は、openerに何かしらセットしてあげれば良いです。
コード:
window.opener = window;
window.close();

でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-12-19 13:42
追加

ネットスケープやFireFoxは↑じゃ閉じれませんね。
FireFoxのJavascriptコンソールによると
「スクリプトはスクリプトによって開かれたウィンドウ以外を閉じることができません。」
だそうです。
W3Cか何かの仕様ですかね?詳しい方補足をお願いします。

両対応の必要がある時は、こんな感じかな?
コード:
window.opener = window;
var win = window.open(location.href,"_self");
win.close();

いのき
ベテラン
会議室デビュー日: 2005/10/06
投稿数: 88
投稿日時: 2005-12-19 13:46
いつもお世話になります。いのきです。

引用:

でっち6号さんの書き込み (2005-12-19 13:24) より:
こんにちは、でっちです。

なぜかは存じません。
通常のアプリにもある終了確認ですかね?

回避方法は、openerに何かしらセットしてあげれば良いです。
コード:
window.opener = window;
window.close();





でっちさん、早速の回答ありがとうございます。
確かに上記方法でうまくいきました。
しかし、「window.close」だけではダメなのが、
「window.opener = window」を追加したら正常に処理した理由が
どうしても分かりません。

よろしければ説明をお願いしてよろしいでしょうか?
流れプログラマ
常連さん
会議室デビュー日: 2005/09/30
投稿数: 26
投稿日時: 2005-12-19 17:03
JavaScript では「JavaScript によってオープンされたウィンドウに限って、無条件にクローズできる」ことになっています。

それ以外のウィンドウをクローズしようとしたときに確認画面が表示されるのは、JavaScript の仕様です。(セキュリティー面の理由による)

window.opener というのは「JavaScript でオープンされたウィンドウに渡される、親ウィンドウオブジェクト」です。ここに window を入れてしまうという処理は、「JavaScript で開いたウィンドウなんだよ」と誤魔化しているわけで・・・かなり強引です。
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2005-12-19 17:10
いわゆるセキュリティーホールですな。
いのき
ベテラン
会議室デビュー日: 2005/10/06
投稿数: 88
投稿日時: 2005-12-19 18:05
いつもお世話になります。いのきです。

流れプログラマさん、Anthyhimeさん、ご返答ありがとうございました。

なるほど、セキュリティーに関連することだったのですね。
それで、無理矢理「javascriptで開いた画面」とするために、このロジックになった訳ですね。
ありがとうございます。
勉強になりました。
未記入
大ベテラン
会議室デビュー日: 2005/03/12
投稿数: 148
投稿日時: 2005-12-19 22:52
セキュリティとかでなったというのを俺も聞いたことあるが、
どういう問題が起こるんだろう。
window.opener になんか入れとくだけで回避できるというのは
良いことなのだろうか。

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