リンクを新しいウィンドウで開くにはどうすればよいですか?


94

特定のリンクのクリックハンドラーがあり、その中で次のようなことを行いたいです。

window.location = url

新しいウィンドウで実際にURLを開くにはこれが必要ですが、どうすればよいですか?

回答:


204

あなたは好きになることができます:

window.open('url', 'window name', 'window settings')

jQuery:

$('a#link_id').click(function(){
  window.open('url', 'window name', 'window settings');
  return false;
});

また、設定することができますtarget_blank、実際に。


しかし、このjqueryコードは自動的にターゲットに移動しません
Amr Elgarhy

26
_blankがデフォルトのターゲットであるため、window.open(url)の使用で十分です
themerlinproject

確かに同じ問題ではありませんが、ファイルをダウンロードするための同じ解決策を探していました(リンクではなくボタンから)。Chromeでは、単純にwindow.location =に変更するまで、ウィンドウが開かず、ダウンロードされませんでした。場所を変更せずにファイルをダウンロードする「url」
gdoumenc

window.open(url)は問題あり
ません

33

クリックハンドラ内にターゲットを強制する方法は次のとおりです。

$('a#link_id').click(function() {
    $(this).attr('target', '_blank');
});

5
クリックハンドラーでjQueryセレクターを使用する必要がないため、行$(this).attr('target', '_blank'); をに変更できます。this.target = "_blank";また、ページのアンカーリンクをrel="external"属性に変更できる場合は、jQueryセレクターを使用するのa[rel="external"]ではなく、jQueryセレクターを使用してページのグローバルクリックハンドラーを作成できます。で選択されたリンクごとのクリックハンドラa#link_id
himanshu 2012

17

5
うわぁ!w3schoolsを使用またはリンクしないでください。これはW3Cに関連付けられていません。代わりにMDNを使用してください:developer.mozilla.org/en-US/docs/Web/API/Window.open
AB Carroll

5
w3schoolsは良いです(「いくつかの」w3cトロールを無視してください)...引き続き信頼できるソースです... w3cでさえそれを再び支持しています;-)
Dawesi

4

これにはjquery prop()メソッドを使用することもできます。

$(function(){
  $('yourselector').prop('target', '_blank');
}); 

2

この問題の興味深い解決策を見つけました。Webサービスからの戻りに基づいた情報を含むスパンを作成していました。スパンの周りにリンクを配置して、クリックすると「a」がクリックをキャプチャできるようにすることを考えました。

しかし、スパンでクリックをキャプチャしようとしていました...スパンを作成するときに、なぜこれをしないのかと思いました

var span = $('<span id="something" data-href="'+url+'" />');

次に、「data-href」属性に基づいてリンクを作成したスパンにクリックハンドラーをバインドしました。

span.click(function(e) {
    e.stopPropagation();
    var href = $(this).attr('data-href');
    var link = $('<a href="http://' + href + '" />');
    link.attr('target', '_blank');
    window.open(link.attr('href'));
});

これにより、スパンをクリックして適切なURLで新しいウィンドウを開くことができました。



1

このソリューションでは、URLが空で、空のリンクが無効(灰色)である場合も考慮されました。

$(function() {
  changeAnchor();
});

function changeAnchor() {
  $("a[name$='aWebsiteUrl']").each(function() { // you can write your selector here
    $(this).css("background", "none");
    $(this).css("font-weight", "normal");

    var url = $(this).attr('href').trim();
    if (url == " " || url == "") { //disable empty link
      $(this).attr("class", "disabled");
      $(this).attr("href", "javascript:void(0)");
    } else {
      $(this).attr("target", "_blank");// HERE set the non-empty links, open in new window
    }
  });
}
a.disabled {
  text-decoration: none;
  pointer-events: none;
  cursor: default;
  color: grey;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<a name="aWebsiteUrl" href="http://www.baidu.com" class='#'>[website]</a>
<a name="aWebsiteUrl" href=" " class='#'>[website]</a>
<a name="aWebsiteUrl" href="http://www.alibaba.com" class='#'>[website]</a>
<a name="aWebsiteUrl" href="http://www.qq.com" class='#'>[website]</a>


0

クリックイベントのイベントハンドラー関数内でAJAX要求実行する場合は注意してください。何らかの理由でChrome(およびおそらく他のブラウザー)は新しいタブ/ウィンドウを開きません。


0

これはあまり良い修正ではありませんが、うまくいきます:

CSS:

.new-tab-opener
{
    display: none;
}

HTML:

<a data-href="http://www.google.com/" href="javascript:">Click here</a>
<form class="new-tab-opener" method="get" target="_blank"></form>

JavaScript:

$('a').on('click', function (e) {    
    var f = $('.new-tab-opener');
    f.attr('action', $(this).attr('data-href'));
    f.submit();
});

ライブの例:http : //jsfiddle.net/7eRLb/


0

Microsoft IEは、2番目の引数として名前をサポートしていません。

window.open('url', 'window name', 'window settings');

問題はwindow nameです。これは動作します:

window.open('url', '', 'window settings')

Microsoftは、次の引数のみを許可します。その引数を使用する場合:

  • _ブランク
  • _メディア
  • _親
  • _探す
  • _自己
  • _上

このMicrosoftサイトを確認する


4
-1:ライセンスに違反する、stackoverflow.com / a / 1462500/560648からのコピー/貼り付けにもかかわらず、それは真実ではありません。引数サポートされています。スペースやダッシュなどの句読点を含めることはできません。その質問に対する他の回答やコメントを読んでください。
オービットのライトネスレース2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.