JavaScriptはタブではなく新しいウィンドウで開きます


364

window.open(url)アイテムが選択されたときに呼び出す選択ボックスがあります。Firefoxはデフォルトで新しいタブでページを開きます。ただし、ページを新しいタブではなく、新しいウィンドウで開くことを希望します。

どうすればこれを達成できますか?




回答:


456

ウィンドウに幅/高さの「仕様」パラメーターを指定します。可能なすべてのオプションについては、こちらをご覧ください。

window.open(url, windowName, "height=200,width=200");

幅/高さを指定すると、タブではなく新しいウィンドウで開きます。


5
良いヒント。Operaはまだこれをタブで開くと思います:)。
ケビンタイグ

7
IE6、FF 3.6、Chrome 9.0での作業
James Westgate

3
FF 11.0ではもう機能しません。私の質問を参照してください!@James
TMS

14
今日のブラウザでは機能しません。デフォルトでは、すべて現在のウィンドウの新しいタブで新しいウィンドウを開きます。また、ブラウザのオプションにも依存します。JavaScriptを使用して制御することはできません。
Pavel Hodek 2012

3
これは、「height = 200、width = 200」と指定して新しいウィンドウで開くことではありません。これは単に追加のパラメータを配置するという事実です(場所、ステータスなど...それは問題ではありません)
Peter

110

高さを使用する必要はありません。使用することを確認してください。高さを使用しない場合、高さ_blankは新しいタブで開きます。

空のウィンドウの場合:

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');

特定のURLの場合:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');

3
名前を付けたい場合はどうすればよいですか?
Aditi 2014年

少なくともChromeではlocation=0、JSがボタンまたはアンカー要素から呼び出される場合に必要です。
Ohad Schneider

完璧に働いた。Firefoxでもlocation = 0を含める必要がありました。
リックジェームズ2017

@nwbradは、私が知る限り、他の値を指定しない場合の '_blank'がデフォルト値であるため、 '_ blank'の部分について確信があります。あなたの場合、新しいタブの代わりに新しいウィンドウを開くには、window.open関数に3番目のパラメーターを提供することで何かを行う必要があります。あなたの場合、それは「toolbar = 0、location = 0、menubar = 0」です。これを確認するには、この3番目のパラメーターを省略し、2番目のパラメーターとして「_blank」を残します。
user1451111 2017

Firefox 76やInternet Explorer 11などの最新のブラウザで完全に動作location=0します。ヒントはパラメータを追加することです。私はまた、ウィンドウに名前を付ける代わりに使用して使用することをお勧め_blankターゲットを、ユーザーがポップアップを開く何回かの要素をクリックした場合、同じウィンドウが再び使用されるように、として、連鎖focus()すでに開かれたポップアップがフォーカスを取得するようにすることを:window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();
OuzoPowerを

82

私は間違っているかもしれませんが、私が理解しているところによると、これはユーザーのブラウザー設定によって制御されており、これがオーバーライドされる可能性があるとは思いません。


1
そうです、ユーザーは「about:config」設定「browser.tabs.opentabfor.windowopen」をtrueに設定できますが、これはグローバル設定であり、ユーザーのブラウザーのグローバル動作を変更したくありません;)
アダム

45
機能するコードがあることを伝えました。これをfirebugコンソールに入力しました:window.open( ""、 "poop"、 "height = 200、width = 200、modal = yes、alwaysRaised = yes"); そして何を推測しますか?できます!!!!!!

24
はい、動作しますが、これは少しハックのようです。Firefoxは、新しいウィンドウとタブを開くことがブラウザの設定であり、JavaScriptの設定ではないように記述されています。したがって、あなたの提案が新しいバージョンのFirefoxで同じように機能しない可能性があります。ハックに頼るのではなく、
アダム

2
明確にするために、それがJavaScriptハックであるという意味ではありません。ウィンドウの高さと幅を追加することは、明らかにjs window.openメソッド(w3schools.com/HTMLDOM/met_win_open.asp)の機能です。Firefoxの意図された動作を操作するという意味でのハックを意味します。
アダム

2
それ自体は、実際にはハックとは呼びません。実際にどのような振る舞いをしたいのかを妥協し、代わりにそれを実装しているだけです。
マッチュ2009

15

試してください:

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");

私はあなたの言うことをするいくつかのコードを持っていますが、その中にはたくさんのパラメーターがあります。これらは最低限必要だと思います。それが機能しない場合はお知らせください。残りは投稿します。


これは、FF 31およびChrome 36で「modal = yes」オプションのみを使用して機能します。指定されたすべてのオプションも機能します。また、FF設定で「新しいウィンドウを新しいタブで開く」をオンにしました。開くオプションがない場合、ウィンドウは新しいタブで開きます。
Clint Pachl

さらにテストを行った結果、ほとんどすべてのパラメーター(少なくとも1つある限り)がタブではなく新しいウィンドウを開くようです。たとえば、「top = 0」はFF 31とChrome 36でも動作します。これは、cwmウィンドウマネージャーを使用するOpenBSDで動作します。したがって、結果は異なる場合があります。
Clint Pachl

[ウィンドウ名]とは何ですか?

10

わかりました、たくさんのテストを行った後、ここで私の結論です:

実行すると:

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');

または宛先フィールドに入力したものは何も変更されません:新しいページが新しいタブで開かれます(ユーザーの設定によって異なります)

ページを新しい「実際の」ウィンドウで開く場合は、追加のパラメーターを指定する必要があります。お気に入り:

window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');

テスト後、使用する追加のパラメータのようですが、問題はありません。これは、「このパラメータ」や「これ以外のパラメータ」を配置して新しい「実際のウィンドウ」を作成するという事実ではなく、新しいパラメータがあるという事実です。 )。

しかし、何かが混乱していて、多くの間違った答えを説明しているかもしれません:

この:

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');

この:

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');

同じ結果は得られません。

最初のケースでは、追加のパラメーターなしで最初にページ開くと、新しいタブで開きます。この場合、指定した名前により、2番目の呼び出しもこのタブで開かれます

2番目のケースでは追加のパラメーターを使用して最初の呼び出しが行われる、ページが新しい「実際のウィンドウ」で開かれます。その場合、2番目の呼び出しが追加のパラメーターなしで行われた場合でも、この新しい「実際のウィンドウ」で開かれますが、同じタブです!

これは、ページを配置する場所を決定した最初の呼び出しが重要であることを意味します。


この回答にはたくさんの++++が必要です
Mitch VanDuyn

9

あなたがする必要はありません。ユーザーが好きな設定を行えるようにします。

新しいウィンドウでページを開くのは煩わしいため、Firefoxはデフォルトでこれを実行します。ユーザーが希望しない場合は、ページの操作を許可しないでください。(Firefoxでは、このように設定すると、新しいウィンドウでタブを開くことができます)。


31
あなたはとても間違っています そして、方法によって、それは上司が望んでいるものだ場合は特に、適切でない「あなたに必要なはずの」と言って

8
コメントを実用的で役立つものにしていきましょう。侮辱されることなく反対することができます。
アダム

17
@theman_on_vista:上司の説得はあなたの責任です。あなたの会社は設計上の問題を解決する責任をあなたに与えました。これには、間違った設計アイデアを指摘することも含まれます。
EFraim、2010

2
仰るとおり。画面はユーザーのものであり、他の誰のものでもありません。
Christopher Creutzig

12
ポップアップまたはタブを選択するのはデザイナーの領域です。私は常にタブを好むユーザーですが、デザインによっては本当にポップアップが必要な場合や、タブが必要な場合があります。それを可能にするのはプログラマの領域にあるべきです。哲学的な違いは別として、この種のコメントはプログラミングリファレンスサイトにはまったく不適切です。そして、この場合、それは「すべきか」ではありません。質問。「どうやって?」です
jbenet 2012

9

あなたは次の機能を試すかもしれません:

<script type="text/javascript">
function open(url)
{
  var popup = window.open(url, "_blank", "width=200, height=200") ;
  popup.location = URL;
}
</script>

実行用のHTMLコード:

<a href="#" onclick="open('http://www.google.com')">google search</a>

2
の目的は何popup.location = URL;ですか?window.open()コールは、適切なURLにそれを開く必要があり、あなたのコード例では、URL実験的にフォールバック(と幅広くサポートしていない)ために起こっているように定義されていないURLオブジェクト。そのためにそれを使用することは議論の余地がありますが、私はここでそれを使用する動機は何ですか?
ケン

確かな答えがあり、場所を編集不可にする方法を教えてくれました。ありがとう
VirtualProdigy 2017

6

キーはパラメータです:

あなたがいる場合提供 [高さ=「」、幅=「」]パラメータを、それが新しいウィンドウで開きます。

パラメータを指定しない場合、新しいタブで開きます。

ChromeおよびFirefoxでテスト済み


1
newwin = window.open( 'test.aspx'、 ''、 ''); Chromeでテスト済み:26
MuniR 2013年

5

興味深いことに、window.openの3番目の属性に(null文字列やプロパティのリストではなく)空の文字列を渡すと、Chrome、Firefox、IEの新しいタブで開くことがわかりました。存在しない場合、動作は異なりました。

だから、これは私の新しい呼び出しです:

 window.open(url, windowName, '');

ただし、元のポスターがポップアップを新しいウィンドウで開こうとしているのではないですか?また、IE 11では、指定したコードスニペットにより、ユーザーのブラウザー設定に基づいて新しいウィンドウまたはタブが開きます。

4

その方法を試してください...

function popitup(url) {
       //alert(url);
       newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
       newwindow.moveTo(350,150);
   if (window.focus) 
          {
             newwindow.focus()
          }
   return false;
  }

3

私にとっての解決策は

"location=0"

3番目のパラメーター。最新のFF / Chromeおよび古いバージョンのIE11でテスト済み

私が使用する完全なメソッド呼び出しは以下の通りです(可変幅を使用したいので):

window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');

2

私はこれをIE(11)とChrome(54.0.2794.1カナリアSyzyASan)で試してみました:

window.open(url, "_blank", "x=y")

...そして、それは新しいウィンドウで開きました。

つまり、クリント・パクルつまり、いずれかのパラメーターを指定すると新しいウィンドウが開くと彼が言ったときは正しかったということです。

-そして、明らかにそれは正当なパラメータである必要はありません!

(YMMV-私が言ったように、私はそれを2つの場所でテストしただけです...そして次のアップグレードは結果を無効にするかもしれません)

ETA:気がついたのですが、IEではウィンドウに装飾がありません。


1

ここで答え。しかし、参考のためにもう一度投稿してください。

window.open()実際のクリックイベントで発生していない場合、新しいタブで開きません。与えられた例では、URLは実際のクリックイベントで開かれています。これは、ユーザーがブラウザで適切な設定をしている場合に機能します。

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

同様に、クリック関数内でajax呼び出しを実行しようとしていて、成功時にウィンドウを開く場合は、async : falseオプションを設定してajax呼び出しを実行していることを確認してください。


1

HTMLターゲットプロパティの問題ではないと思いますが、Firefoxの[オプション]メニューの[タブ]タブにある[新しいウィンドウでnwウィンドウを開く]オプションをオフにしました。確認してもう一度お試しください。

ここに画像の説明を入力してください


0

私も同じ質問をしましたが、比較的簡単な解決策を見つけました。

JavaScriptではwindow.opener !=null;、ウィンドウがポップアップであるかどうかを確認するためにチェックしていました。同様の検出コードを使用して、サイトがレンダリングされているウィンドウがポップアップであるかどうかを判断している場合、新しいウィンドウのJavaScriptを使用して「新しい」ウィンドウを開きたいときに、簡単に「オフにすることができます。

これを常に「新しい」ウィンドウにしたいページの上部に置くだけです。

<script type="text/javascript">
    window.opener=null;
</script>

私は自分のサイトのログインページでこれを使用して、ユーザーがポップアップウィンドウを使用して自分のサイトに移動しても、ポップアップの動作が発生しないようにしています。

これを実行して、指定したURLに移動する単純なリダイレクトページを作成することもできます。何かのようなもの、

親ページのJavaScript:

window.open("MyRedirect.html?URL="+URL, "_blank");

そして、ここから小さなJavaScriptを使用することで、URLを取得してリダイレクトできます。

リダイレクトページのJavaScript:

 <script type="text/javascript">
        window.opener=null;

    function getSearchParameters() {
          var prmstr = window.location.search.substr(1);
          return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
    }

    function transformToAssocArray( prmstr ) {
        var params = {};
        var prmarr = prmstr.split("&");
        for ( var i = 0; i < prmarr.length; i++) {
            var tmparr = prmarr[i].split("=");
            params[tmparr[0]] = tmparr[1];
        }
        return params;
    }

    var params = getSearchParameters();
    window.location = params.URL;
    </script>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.