2009-10-15 13 views
113

ユーザーがリンクをクリックすると、データベース内のフィールドを更新し、要求されたリンクを新しいウィンドウで開く必要があります。更新プログラムは問題ありませんが、別のハイパーリンクをクリックすることなく新しいウィンドウを開く方法はわかりません。JavaScriptでtarget = "_ blank"をシミュレートする方法

<body onLoad="document.getElementById('redirect').click"> 
<a href="http://www.mydomain.com?ReportID=1" id="redirect" target="_blank">Report</a> 
</body> 
+1

Hm? 'target =" _ top "'は新しいウィンドウでは開きません。 'target =" _ blank "'はそうです。 – Tomalak

+0

リンクが既に新しいウィンドウで開かれている場合(target = "_ blank"のため)、javascriptのクリックハンドラがデータベースを更新しているため、新しいウィンドウをJavascriptで開く必要がありますか? –

答えて

208
<script> 
    window.open('http://www.example.com?ReportID=1', '_blank'); 
</script> 

2番目のパラメータはオプションであり、ターゲットウィンドウの名前です。

+1

'window.open'は' target = "_ blank" 'が実行することを行います - 新しいウィンドウでURLを開きます。 – ceejayoz

+2

はい。 window.open()の2番目の引数はウィンドウに与えたい "名前"で、リンク上のターゲットを設定するのと同様です。 https://developer.mozilla.org/En/DOM:window.open –

+1

ああ、私は参照してください。 window.openはFirefoxのポップアップブロッカーによってブロックされますが、target = "_ blank"はそうではありません。 クライアントに自分のウェブサイトからポップアップを有効にするように頼むべきですか? –

2

あなたは、タグからのhrefを抽出することができます。

window.open(document.getElementById('redirect').href); 
7

私はこれを行うと契約を整理ですけど、ここで私は私のアプリで問題を解決するために使用しているものです。基本的には何がここで起こっている

if (!e.target.hasAttribute("target")) { 
    e.preventDefault();  
    e.target.setAttribute("target", "_blank"); 
    e.target.click(); 
    return; 
} 

は、私はリンクがtarget=_blank属性を持っている場合のチェックを実行しています。そうでない場合、リンクがトリガーされなくなり、新しいウィンドウで開くように設定し、プログラム上でクリックします。

あなたはさらに一歩進み、オリジナルのクリックの停止をスキップ(と全体の多くよりコンパクトなコードを作る)、これを試みることによってできます。

if (!e.target.hasAttribute("target")) { 
    e.target.setAttribute("target", "_blank"); 
} 

あなたが実装抽象化へのjQueryを使用していた場合

jQuery(event.target).attr("target", "_blank") 

あなたはあなたの正確なユースケースに合わせて、それを手直しする必要があるかもしれませんが、ここで私は自分のかゆみに傷方法は次のとおりです。属性クロスブラウザを追加するのではe.target.setAttribute("target", "_blank")の代わりにこれを使用する必要があります。

ここでは、demoのメッセージが表示されます。

は、私は個人的には単一のリンク用である場合、次のコードを使用して好む

6

(jsfiddle内のリンクは、この議論..必要はありません新しいタブ:)に戻ってきます)。それ以外の場合は、類似したコードを持つ関数を作成するのが最もよいでしょう。

onclick="this.target='_blank';" 

私はW3CのXHTML厳密テストをバイパスするためにこれを使い始めました。

+0

私は、インラインJavaScriptはどこでも動作する「非標準」属性を追加するよりも面倒だと思います。特定の状況で –

+0

@MattiVirkkunenは、それが唯一の解決策 –

+0

@Claudiuです:あなたは、このような不条理な状況に自分自身を見つける場合は、むしろ、その周りにその場しのぎより原因を修正する必要があります。 –

5

これは私がjQueryを使って行う方法です。新しいウィンドウで開きたい各リンクのクラスがあります。

$(function(){ 

    $(".external").click(function(e) { 
     e.preventDefault(); 
     window.open(this.href); 
    }); 
}); 
14

これは

var link = document.createElementNS("http://www.w3.org/1999/xhtml", "a"); 
    link.href = 'http://www.google.com'; 
    link.target = '_blank'; 
    var event = new MouseEvent('click', { 
     'view': window, 
     'bubbles': false, 
     'cancelable': true 
    }); 
    link.dispatchEvent(event); 
+1

これは受け入れられるべきです。 – ebilgin

+0

IE11:「ランタイムJavascriptエラー:オブジェクトに対して有効なアクションではありません」 –

+4

この回答には何が起こっているのかの説明を追加することで改善できる –

1

これはにあなたを助けるかもしれないが、すべてのページがリンク開く役立つかもしれない:

$(".myClass").each(
    function(i,e){ 
     window.open(e, '_blank'); 
    } 
); 

あなたが持っていただろうようですが、別のタブにすべての<a href="" class="myClass"></a>リンク項目を開きます。それぞれをクリックした。

ブラウザコンソールに貼り付けるだけで済みます。 jQueryフレームワークが必要です

関連する問題