2011-12-01 8 views
6

最新のブラウザのほとんどは、新しいタブまたは新しいウィンドウでリンクを開くには、ctrl+clickまたはcommand+clickまたは類似のコマンドをサポートしています。クリックされたリンクが新しいウィンドウまたはタブを開くためのものかどうかを判断してください

アプリケーションでは、クリックするとリンクが無効になります。ただし、ターゲットが同じウィンドウの場合(たとえば、新しいタブで開いた場合、リンクを再度クリックするのが妥当であるため、リンクが無効になることはありません)。

クリックして作成されたイベントオブジェクトを試してデバッグしましたが、ターゲットが新しいタブであるか新しいウィンドウであるかについての情報は見つかりませんでした。

既知の回避策:確かに、特定のリンクをクリックしている間に特定のキーが押されたかどうかを確認することは可能ですが、簡単なことですが、これらのコマンドはブラウザやOSによって異なります。複雑なマッピングや、ユーザーが設定したものなどを正確に特定することができます。

場所を新しいタブまたはウィンドウで開く必要があるかどうかを判断する信頼できる方法はありますか?このスクリプトは、リンクがtarget="_blank"属性に基づいて、新しいタブ/ウィンドウで開くように起こっている場合にのみ、リンクをクリックできるようになりますhttp://jsfiddle.net/pioul/eCuNU/4/

:ここ

答えて

3

あなたは作業例を持っています。

HTML:

<a href="http://google.fr" target="_blank">new window</a> 
<a href="http://google.fr" target="_self">same window 1</a> 
<a href="http://google.fr" target="">same window 2</a> 

のjQuery:

$("a").bind("click", function(e){ 
    if($(this).attr("target") != "_blank"){ 
     e.preventDefault(); 
    } 
}); 

EDIT:

あなたはこのように、アカウントCTRL +クリックを考慮に入れることができます。

$("a").bind("click", function(e){ 
    if($(this).attr("target") != "_blank"){ 
     if(!e.ctrlKey){ 
      e.preventDefault(); 
     } 
    } 
}); 
+1

これは、固定ターゲット属性でのみ機能します。ユーザーがctrl(または同様のもの)を押し続けてこれを上書きすると、属性はもちろん変更されないため、決定は失敗します。 – Remo

+1

あなたが話したケースにマッチするように自分の答えを編集しました。ユーザーが新しいウィンドウでリンクを開き、コード内でそれを検出しようとするあらゆる方法について考える以外の方法はありません。 – Pioul

0

新しいタブまたは同じウィンドウでリンクを開くには、ブラウザの設定で何度か設定されます。

リンクオブジェクトのターゲット属性を確認できます。

<a href="http://your_link_to_page" target="_blank" >This open in new window</a> 

javacriptを使用して、ページの読み込み時にアンカータグを操作し、ターゲット属性を確認します。目標値が_blankに設定されている場合は有効にするか、ユーザーがリンクをクリックしたときにこのチェックを実行できます。

リンクをクリックしたときにCTRLが押されたことを検出するメカニズムを使用できます。 thisのようなリソースがあります。システムを構築することができます。

NOte:JQueryを使用している場合は、チェックする必要があるリンクを分類するために異なるクラスを使用します。また、リンクがクリックされた状態で準備完了状態にするか、無効にします。

+0

残念ながら、ユーザーが 'ctrl'を押し続けて新しいタブを強制した場合、これはまだ適用されません。 – Remo

+0

マウスのダウンイベントが発生したときに、最初にどのキーが押されたかを検出する必要があります。このチェックは、グローバルスコープ(つまり、ページスコープ内)で行う必要があります。キー押下に基づいてjS変数を設定します。その後、clickイベント内で残りのチェックを行います。 –

0

ブラウザが新しいタブまたはウィンドウでリンクを開くのを防ぐことはできません。右クリックして下に移動するとOperaの新しいタブが開きますが、これは検出できないと思いますが、マウスのジェスチャーについて考える(設定できない)設定があるかもしれません。

また、ブラウザが新しいウィンドウ(target="_blank"またはさらにwindow.open)のタブを開くように強制すると、不正なスタイルとみなされます。ユーザーは自分が何をしたいかを選択させるべきです。本当にやりたいのであれば、ほとんどの時間で動作するはずのwindow.onunloadも考えられます。

+0

これはまったく何も防止したり強制したりすることではありません。リンクが新しいウィンドウで開かれるかどうかは**検出されます**。 – Remo

関連する問題