2013-09-26 19 views
10

window.open()メインスレッドから呼び出されると、デフォルトで新しいタブが開きます。javascript window.open from callback

しかし、ここでは新しいウィンドウで開くたびに(オペラ座16とGoogle Chromeの29)

<input type="button" value="Open" onclick="cb1()"> 

<script type="text/javascript"> 
function cb1() { 
    setTimeout(wo, 1000); //simple async 
} 

function wo() 
{ 
    var a = window.open("http://google.com", "w2"); 
    a.focus(); 
} 
</script> 

が(笑、これはOpen a URL in a new tab (and not a new window) using JavaScriptのための私の答えです)。

ここでタブ(ブラウザのデフォルト設定)で開くことはできますか?

+0

この現象はどのブラウザで発生しますか? – shanet

+0

うまくいけば、これはあなたの_ [回答](http://stackoverflow.com/questions/2601761/change-browser-settings-by-script)_です。 –

+0

すべてのブラウザテストページ<!DOCTYPE html> user2819018

答えて

0

新しいウィンドウが新しいタブ、または新しいインスタンスとしてオープンされている場合は、ユーザーの設定に依存します。

+0

OPは、特定の状況では新しいタブで開き、別のウィンドウでは新しいウィンドウで開くので、彼が持っている問題は明らかにユーザー設定とは無関係であると述べています。 – Yogh

10

私たちはこの同じ問題に遭遇し、答えのためにSOを狩りました。次のように私たちは私たちの状況や蒸留知恵で作品を発見したのである:

問題は、ブラウザのポップアップブロッカーは、プログラムのウィンドウが開き防止に関連しています。ブラウザは、メインスレッド上で発生する実際のユーザのクリックからウィンドウを開くことを可能にする。同様に、メインスレッドでwindow.openを呼び出すと、上記のように動作します。この回答によると、Open a URL in a new tab (and not a new window) using JavaScriptによれば、Ajaxコールを使用していて、正常にウィンドウを開くには、async: falseを設定する必要があります。これは、すべてがメインスレッド上に保持されるためです。

我々はそのように私たちのAjax呼び出しを制御しますが、理由と同じ理由の作品別の解決策を見つけませんでした。警告、それは少しハッキーであり、あなたの制約を与えてあなたのために適切ではないかもしれません。 Open a URL in a new tab (and not a new window) using JavaScriptの別の回答にコメントしてから、setTimeoutを呼び出してから、遅延機能で更新してください。これを行うにはいくつかの方法があります。どちらかあなたがそれを開くと、w = window.open...をウィンドウへの参照を保持し、そのターゲット、window.open('your-url', 'target_name')で開い遅れの関数で、ターゲット、window.open('', 'target_name')w.locationまたはオープンを設定し、基準を維持するブラウザに依存しています。もちろん

ユーザーが新しいウィンドウでリンクを開くためにその設定を持っている場合、これはそれを変更するつもりはないが、それはOPのための問題ではありませんでした。

+1

さらに詳しいコードが必要な方は、このブログの記事をご覧ください:http://theandystratton.com/2012/how-to-bypass-google-chromes-javascript-popup-blocker –