質問: javascriptで、親ウィンドウからopenで子ウィンドウを開いた後、親ウィンドウにfocus()します。 このとき、子ウィンドウを前面に表示し続ける方法を探しています。 ブラウザはIE11です。 具体的には、子ウィンドウを開くときに、setTimeoutで3秒後に親ウィンドウにfocusしています。 このとき子ウィンドウはフォーカスを失うから、window.onblurかdocument.onfocusoutで 子ウィンドウにfocusすれば前面に表示し続けられると考えました。 それで、親ウィンドウと子ウィンドウを下記のようにしました。 親ウィンドウ(parent.html): ``` 子ウィンドウを開く ``` 子ウィンドウ(child.html): ``` 子ウィンドウ ``` これをIE11で実行すると、子ウィンドウを開いてから3秒後、予想に反して子ウィンドウは 親ウィンドウの後ろに隠れてしまいます。 ただし、子ウィンドウが前面に表示されているときに後ろの親ウィンドウを選択したときは、 子ウィンドウは隠れずに表示され続けます。 親ウィンドウにfocusしても子ウィンドウが隠れないようにすることはできないでしょうか? **追記** window.openでモーダルぽくする - Qiita 上記URLを参考にして、一定時間ごとに子ウィンドウにフォーカスが当たっているかをチェックし、外れていたらフォーカスを当てるという処理にしてみました。 parent.htmlを下記のようにしました。 ``` 子ウィンドウを開く ``` setIntervalを使って、子ウィンドウを0.1秒ごとにチェックし、フォーカスが当たっていなければfocus()します。 これで実行してみると、子ウィンドウにフォーカスを当てる処理は動いているようなのですが、それでも子ウィンドウは前面には来ませんでした。 フォーカスが当たっていることと、ウィンドウが最前面に表示されることは必ずしも一致しないのか、と思ってさらに調べています。 引き続き、ご回答いただけると幸いです。
回答: Windows を開いた側で 子 Windows にフォーカスをあてると目的の動作になると思ます。 `parent.html` の一部 ``` function openCF() { var childWin = open("./child.html", "_blank", 'width=200,height=200'); setTimeout(function(){ childWin.focus(); setTimeout(arguments.callee, 1000) },3000); } ``` サンプルは 定期的にフォーカスを当てていますが、子Windows の フォーカス状態を 子Windows の `input[hidden]` な領域に設定しておき、その値を見て、フォーカスが外れているな。と判断できた時にフォーカスを当てるようにすると、もうすこし まともな動作になると思います。 ただ、この方法でも 親の IE が最小化されている時には子はフォーカスされません。 これは Windows API レベルで どうしようもない問題なのでこれを回避するためには 専用のプログラムを作成するしかありません。 外部アプリケーションのウィンドウをフォーカスさせる方法 また、管理者権限で コマンドプロンプトを開いたり、リモートデスクトップ接続の場合などセキュリティー的に 特権が分離されたアプリケーションが存在する場合には それらのアプリが最優先となるため、思った通りには動かないと思います。 それは Windows である限りどうしようもありません。