SQLの窓

2010年12月14日


Opera の window.open のバグ

▼ 以下は古い記事です


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 が開きません。

Opera_x

そうすると、一般ユーザではどうにもできない状態になってしまうわけで・・・

正しい修復方法はそもそも解りませんが、operaprefs.ini を保存しておいて、Opera を終了させているあいだに operaprefs.ini を削除してやると、次の起動で Opera は初期化されます。

で、既存の保存していた設定を再び operaprefs.ini に上書きすると元に戻ります



タグ:Opera バグ
【WEBブラウザの最新記事】
posted by lightbox at 2010-12-14 12:23 | WEBブラウザ | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり