Google Chromeで(URLのみ指定で)window.open()を実行したとき、別タブで開く場合と、別ウィンドウが開く場合がある。
バージョン 33.0.1750.154 mで確認
条件
試してみて分かったことは、
- jQuery.get() 等の、XMLHttpRequest を使用していると思われる処理の、(onreadystatechange経由でコールされた)コールバック関数内で window.open() を呼び出すと、別ウィンドウで開いてしまう
らしいということ。
コールバック関数内でも別ウィンドウでは開きたくない場合
jQuery.get() 等を呼び出す前に、予め window.open('about:blank') をコールしておき、返された子ウィンドウの window オブジェクトをコールバック関数内で使用するようにすればよい。
サンプルソース(抜粋)
var wopen = function(url, cwin){ if (cwin) { // 子ウィンドウの location 変更 cwin.location.href = url; } else { // 子ウィンドウのオブジェクトが渡されなかった場合 cwin = window.open(url); // 新たに子ウィンドウを開く }; return cwin; }; $.get(location.href, function(){wopen('http://www.google.co.jp')}, 'html'); // 別ウィンドウで開いてしまう var cwin = wopen('about:blank'); // 予めタブで開いておく $.get(location.href, function(){wopen('http://www.google.co.jp', cwin)}, 'html'); // 開いておいたタブ内で location が変更される