▼ 以下は古い記事です
window.open だけで言えば、開いた元のウインドウの click イベントで、window.open で開いたウインドウにフォーカスを移せないです。IE、Firefox、Chrome では正常に動きます。
そもそも、Opera だけが showModalDialog に対応しておらず、その代替え策としてのコードを書いてテストしたら見事に裏切られました。
実行したのは以下のようなコードで、window.open されたほうから opener に半透明な div で使用不可能にして、その div をクリックしたら、フォーカス移動しています。
var win = window.opener;
// ページ全体を覆う DIV の作成
win.ds = win.document.createElement('div');
win.ds.setAttribute('id','ds')
win.ds.style.position='absolute';
win.ds.style.width='100%';
win.ds.style.height=win.document.getElementsByTagName("HTML")[0].scrollHeight+200+'px';
win.ds.style.left='0px';
win.ds.style.top='0px';
// IE8 までは、opacity プロパティが使えないようです
var userAgent = window.navigator.userAgent.toLowerCase();
if (userAgent.indexOf("msie") > -1) {
win.ds.style.display = 'none';
win.ds.style.backgroundColor = '#000000';
win.ds.style.filter='alpha(opacity=50)';
}
else {
win.ds.style.backgroundColor = '#000000';
win.ds.style.opacity=.5;
}
// ページの最後に追加
win.document.body.appendChild(win.ds);
// IEのみ後表示
if (userAgent.indexOf("msie") > -1) {
win.ds.style.display = '';
}
win.ds.onclick= function(){try{window.focus();}catch(e){}}
しかし、問題はそれだけでは無く、Opera で window.open したほうのwindow を先に閉じると、開かれたウインドウが最後のウインドウになってしまって、次からそのウインドウでしか Opera が開きません。
そうすると、一般ユーザではどうにもできない状態になってしまうわけで・・・
正しい修復方法はそもそも解りませんが、operaprefs.ini を保存しておいて、Opera を終了させているあいだに operaprefs.ini を削除してやると、次の起動で Opera は初期化されます。
で、既存の保存していた設定を再び operaprefs.ini に上書きすると元に戻ります