- ベストアンサー
最新のGeckoエンジンに対応するwindow.close
前の質問に回答が付かなかったので削除して再度質問させていただきます。 Geckoエンジンでwindow.closeが効かない問題は結構有名でこれまで これまた以下にあるような有名な方法で対応していました。 http://tosaka.org/tips/javascript.html ところが、現在の最新バージョンのGeckoエンジンではこれでも閉じる ことができないようです。 確認した限りではFx 1.5.0.12(Gecko/20070508)では閉じることが できますがSeaMonkey 1.1.11(Gecko/20080702)では閉じることができず about:blankページになるだけです。 現在ではFxなどGeckoエンジン勢も無視できない状態ですのでこれを 何とか無理矢理閉じる方法はないものでしょうか。 (上記の方法も無理矢理でしたが...) top.nameの名前を変えてみたり、self.closeにしてみたりと自分でも 一応根拠なく思いつく限りいろいろ試したもののできませんでした。 セキュリティなどのためとはいえ、あまりにも不便すぎます。 関連質問 http://oshiete1.goo.ne.jp/qa2765613.html (こちらではできないという結論になっています) なお、IE(Trident IV)及びOp(Presto)やSF(WebKit)では正常に閉じる ことができています。 セッション管理の後始末も兼ねているため、極力閉じるボタンを押して 欲しいので閉じることができないと困ります。 (もちろんそれでも閉じるボタンを押さないで閉じる人もいるだろうから 一定時間経つと自動で後始末するようにはしています)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>window.open で開いたウィンドウで window.close openをしたwindowで?openされたwindowで? 前者なら勿論「window.close()」という記述ではおかしいのは判るよね 後者でならとりあえず開いたwindowをオブジェクトとして取得して、それを使ってcloseかけられないか試してみたらどうだろう
その他の回答 (2)
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
本来、自分で開いたんじゃないWindowを閉じる権限は持たせるべき じゃないんだから、スクリプトに閉じさせたいWindowはスクリプト に開かせるのが常道です。自分の子しか閉じさせないのもアリ。 セッション管理が目的なら、body要素のonUnLoad属性で後始末用の スクリプトでも呼んでみてはどうでしょう。
補足
回答ありがとうございます。 > 本来、自分で開いたんじゃないWindowを閉じる権限は持たせるべき > じゃないんだから、...(後略) 閉じようとしているのは自分で開いたウィンドウです。 一応、ANo.1さんの補足にも書いたようにアンカータグで target="_blank" としていたのを var wind = window.open('test.html', 'test'); として、開いたウィンドウ上で window.close(); を実行してみましたが閉じられないようです。 (target="_blank" の時とエラー内容は違っています) > セッション管理が目的なら、body要素のonUnLoad属性で後始末用の > スクリプトでも呼んでみてはどうでしょう。 すみません。 onunloadはページの推移でも呼ばれるため、これは使用できません。 また、閉じるボタンが必要なのは送信完了したフォームのウィンドウを 閉じたいということでもあるので...。 この動作自体がとりあえず確認できた限りではGeckoのみで発生して いるということも頭を悩ませている原因なんです。 他のエンジンでも同様の方向性なら、もう諦めるしかないのですが...。
- SAYKA
- ベストアンサー率34% (944/2776)
>あまりにも不便すぎます 発想が逆だよ。 そもそも複数ウィンドウやフレームを前提に作るべきではないとしているのだから(以下略) http://developer.mozilla.org/ja/DOM/window.close ---------------一部抜粋--------------- このメソッドが許可されるのは、window.open メソッドを用いたスクリプトによって開かれたウィンドウに対して呼び出されたときのみ -------------------------------------- つまりwindow.openを介さずに開いた物は対象外。(aタグtarget等) それに合致していて閉じれないなら仕様だね。 ショップサイトとかで別窓の殆どがwindow.openで作ってあるのはそういう理由じゃないかな。
補足
回答ありがとうございます。 そのGeckoエンジン独特の流儀がよく分からないのです。 そもそも、複数ウィンドウやフレーム自体を非推奨としていることも 分からないのです。 確かに本来のHTMLの概念からは当然の流れなのかもしれませんが、 実際に利用されている用途とは相反しています。 なお、試しに window.open で開いたウィンドウで window.close を してみたのですが、これでも閉じることができませんでした。 エラーコンソールには以下のようにでています。 Warning: Event=click, use of preventCapture() is deprecated. Use W3C standard stopPropagation() instead. Source File: chrome://navigator/content/navigator.xul Line: 0 Warning: Event=click, use of preventBubble() is deprecated. Use W3C standard stopPropagation() instead. Source File: chrome://navigator/content/navigator.xul Line: 0 Error: browsers.item is not a function Source File: chrome://navigator/content/navigator.js Line: 477
お礼
どうもありがとうございます。 どうやら、タブブラウザ拡張が原因だったようです。 タブブラウザ拡張をアンインストールしたら閉じることができるように なりました。 どうやら、タブブラウザ拡張機能の中で廃止された機能が使用されて いたことが直接の理由となって途中でエラーがでていたようです。 SM1.1.1及びFx3.0でも正常に閉じることを確認できました。 (この際なのでFxをバージョンアップしました) タブブラウザ拡張はTab Mix Plusに置き換えました。 お手数かけてすみませんでした。