web-dev-qa-db-ja.com

Chrome、Javascript、window.open新しいタブで

クロムでは、これは新しいタブで開きます。

<button onclick="window.open('newpage.html', '_blank')" />

これは新しいウィンドウで開きます(しかし、これも新しいタブで開きたいです:

<script language="javascript">
  window.open('newpage.html', '_blank');
</script>

これは可能ですか?

107
Andrew

これを直接制御することはできません。InternetExplorerユーザーによって制御されるオプションだからです。

別のウィンドウ名でWindow.openを使用してページを開くと、ポップアップのように新しいブラウザウィンドウで開き、ORは新しいタブで開きます。

編集:

より詳細な説明:

1最近のブラウザでは、window.openはポップアップではなく新しいタブで開きます。

2。 3番目のパラメータにオプションを指定することで、ブラウザに新しいウィンドウ(「ポップアップ」)を強制的に使用させることができます。

window.open呼び出しがユーザーが開始したイベントの一部ではなかった場合は、新しいウィンドウで開きます。

4。「ユーザー開始イベント」は同じ関数呼び出しにする必要はありません - ただし、ユーザークリックによって呼び出された関数から発生する必要があります。

5。ユーザーが開始したイベントが(clickイベントにバインドされていないイベントリスナーまたはデリゲートで、またはsetTimeoutを使用して)関数呼び出しを委任または延期した場合、そのステータスは "ユーザー開始"として失われます。 」

6ポップアップブロッカーの中には、ユーザーが開始したイベントからウィンドウを開くことを許可するものがありますが、それ以外の場合は開くことはできません。

7。ポップアップがブロックされている場合、(ユーザーが開始したイベントによって)通常ブロッカーによって許可されているものもブロックされることがあります。いくつかの例…

新しいタブではなく、新しいブラウザインスタンスでウィンドウを開くように強制する:

window.open('page.php', '', 'width=1000');

次の関数は、他の関数を呼び出す場合でも、ユーザーが開始したイベントと見なされます。

function o(){
  window.open('page.php');
}
$('button').addEvent('click', o);

以下はsetTimeoutがそれを延期するので、ユーザー開始イベントとしては認められないでしょう。

function g(){
  setTimeout(o, 1);
}
function o(){
  window.open('page.php');
}
$('button').addEvent('click', g);
146

ユーザーがそれを好む場合、タブの使用を強制することが時々役に立ちます。 Prakashが前述したように、これは時々ユーザーによって開始されなかったイベントの使用によって指示されます、しかしそれを回避する方法があります。

例えば:

$("#theButton").button().click( function(event) {
   $.post( url, data )
   .always( function( response ) {
      window.open( newurl + response, '_blank' );
   } );
} );

"always"機能はユーザーが開始したものとは見なされないため、常に新しいブラウザウィンドウで "newurl"を開きます。ただし、これを行うと、

$("#theButton").button().click( function(event) {
   var newtab = window.open( '', '_blank' );
   $.post( url, data )
   .always( function( response ) {
      newtab.location = newurl + response;
   } );
} );

ISユーザーが開始したボタンクリックのユーザー設定によって、新しいブラウザウィンドウを開くか新しいタブを作成します。それでは、AJAX投稿から戻った後に、場所を希望のURLに設定します。ユーザーがそれを好むのなら、私たちはタブの使用を強制します。

33
Frank A Tinker

現時点で(Chrome 39)私は新しいタブを開くためにこのコードを使用します。

window.open('http://www.stackoverflow.com', '_blank', 'toolbar=yes, location=yes, status=yes, menubar=yes, scrollbars=yes');

もちろん、これはChromeの将来のバージョンで変わるかもしれません。

ユーザーが使用しているブラウザを制御できない場合は、これを使用することはお勧めできません。将来のバージョンや異なる設定では動作しないかもしれません。

11
Nico Wiedemann

window.open(url, '_blank')を使用すると、Chrome、Firefoxなどでブロックされます(ポップアップブロッカー)。

これを試して、

$('#myButton').click(function () {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
});

これのために働くjsフィドル http://jsfiddle.net/safeeronline/70kdacL4/2/

ajaxウィンドウを開くための作業用jsのフィドル http://jsfiddle.net/safeeronline/70kdacL4/1/

10
Mohammed Safeer

これはChromeとFirefoxの新しいタブ、そしておそらく私がテストしていないより多くのブラウザでリンクを開くでしょう。

var popup  = $window.open("about:blank", "_blank"); // the about:blank is to please Chrome, and _blank to please Firefox
popup.location = 'newpage.html';

基本的には新しい空のタブを開き、その空のタブの位置を設定します。ブラウザのタブ/ウィンドウの動作は実際にはブラウザ、ユーザーのドメイン、責任そして選択であるため、これは一種のハックであることに注意してください。

2行目はコールバックで呼び出すことができます(たとえばAJAXリクエストを行った後)が、ブラウザはそれをユーザーが開始したクリックイベントとして認識せず、ポップアップをブロックすることがあります。 。

6
Magne

クリアミニソリューション$('<form action="http://samedomainurl.com/" target="_blank"></form>').submit()

3

このコードを使って新しいタブで開くことができます。

function openWindow( url )
{
  window.open(url, '_blank');
  window.focus();
}

stackoverflow ..から入手しました。

0
Dilip Rajkumar