2013-05-25 9 views
8

私は、2つ以上のタブを開くための小さなJavaScriptを用意しています。これはFFとIEでは正常に動作しますが、クロムはタブの代わりに新しいウィンドウで2番目のウィンドウを開きます。私は2つの同一のURLで試したので、URLに依存していません。最初はタブで開き、もう1つは新しいウィンドウで開きます。ここでクロムのタブ/ウィンドウのwindow.openの動作

は私のコードスニペットです:

for(var i=0 ; i<sites.length ;i++) 
{ 
    window.open(sites[i].Url); 
} 
+0

もっと明確になることができますか?あなたの質問が分かりません –

+0

@ LiteStyle彼のコードはChromeの新しいタブの代わりに新しいウィンドウを開きます。 – Juampi

+0

ちょっと分かりやすいのは、テストページです。http://www.bosmaadvies.com/chrometest.html – user1151653

答えて

11

Chromeは自動的にユーザーのアクションごとにタブに限られ、アクションを生成し、ユーザーの場合のみ、新しいタブでURLを開きます。それ以外の場合は、新しいウィンドウ(BTWはChromeではデフォルトでブロックされています)にURLが開きます。
window.openは、ウィンドウの代わりに新しいタブでページを開くためのユーザー操作(たとえばonclick)によってトリガーされるコールバック内で呼び出される必要があります。

この例では、ユーザーの操作に応じてN個のタブを開こうとしています。しかし、最初のタブだけが新しいタブで開かれます(ユーザーが作成したアクションなので)。その後、別のURLが新しいウィンドウで開かれます。

同様の質問:force window.open() to create new tab in chrome(maclemaによって答えを参照)

+1

ありがとう、私はこれが。私は関数が一貫して動作し、それが呼び出されたときに動作を変更してはならないと感じるので、バグとしてGoogleに報告しました。それ以外にも、他のブラウザでは単にタブが開きます。 – user1151653

+1

新しいウィンドウにはブロック機構があり、新しいタブにはないため、設計通りです。 アラートと同じことです。同じスコープ/コンテキスト内で複数の連続したアラートがある場合、最初のアラートが正常に表示され、次のアラートにはすべて「ダイアログを表示しない」チェックボックスが表示されます。 –

+1

私は考慮すべき点を理解していますが、予期しない動作につながると、率直に言って、馬鹿げたデザインだと思います。私は関数呼び出しが何をしているのか知りたいのですが、window.openの呼び出しが別の呼び出しとは全く異なる結果につながる場合、その設計は誤りです。 FFとIEにはポップアップブロッカーがあり、これを正しく実装しています。 – user1151653

0

私は生命維持の説明を与えるこの質問 What is the (function() { })() construct in JavaScript?に出くわしました。私はこれが使えると思う。私と一緒に耐えてください私はjavascriptについての深い知識を持っていません。しかし、私は以下のように努力しました。

var sites = [{"url" : "http://www.google.com"} , {"url" : "http://www.yahoo.com"} , {"url" : "http://www.msn.com"}]; 
console.log(sites); 
for(var i=0 ; i < sites.length ;i++) { 
    (function(i) { 
     console.log(i); 
     window.open(sites[i].url , "_blank"); 
    })(i); 
} 

クロムの新しいタブでURLを開きます。

関連する問題