web-dev-qa-db-ja.com

CTRLキーを押しながらクリックしても、一部のリンクが新しいタブで開かないのはなぜですか?

閲覧中にリンクをCtrlキーを押しながらクリックして、新しいタブで開くこともあります。ただし、新しいタブで開くのではなく、Ctrlキーを押さずに通常のようにクリックしたかのように、現在のタブをクリックして参照します。 Ctrlキーを完全に押し下げて、キーボードやマウスに問題がないことは間違いありません。

ときどき、新しいタブがリンクとともに開かれますが、現在のタブも同時にリンクを参照します。

21
Coldblackice

舞台裏のJavaScript

これは、そのようなWebページの開発者がJavaScriptでマウスクリックをインターセプトし、インターセプター内で非同期ネットワークリクエストを実行するときに発生し、クリックを追跡する可能性があります。非同期ネットワーク呼び出しが戻ると、JSは次のようなものを使用してプログラムによるリダイレクトを行います:window.location.href = url;

このプログラムによるリダイレクトは、押し続けても、常に同じタブにページをロードします CtrlCmd Mac)。

MiddleMouseを使用してオーバーライドする

マウスの中央ボタンをクリックするか、コンテキストメニューから'新しいタブで開く'を選択すると、インターセプトするJavaScriptコードが完全にバイパスされ、JavaScriptコードがまったくないかのようにリンクが開きます。

11

これを修正するために link-fixer という名前のFirefoxアドオンを(退屈に)作成しました。 addons.mozilla.orgからインストール できます。 Firefox 48.0以降が必要です。

私自身の引用:

リンクをクリックしたときのctrl + click、shift + click、cmd + clickのデフォルトの動作は、リンクを新しいタブまたは新しいウィンドウで開くことです。この動作は、不注意な開発者によって壊れることがあります。このアドオンは、デフォルトの動作を復元し、修飾キーが常に尊重されるようにします。

インストールしたら、他に必要なことはありません。リンクをctrlキーを押しながらクリックすると、新しいタブで開きます。また、2番目の段落で説明する問題のバリエーションも解決します。

8
danielnixon

例としてこのリンクを見てみましょう:

<a href="test.php" onclick="someFunction(this); return false;">Test</a>

この場合のhref属性は、読みやすさのために疑似リンクを作成しています(JavaScriptが無効になっている場合でもリンクが機能するようにします)。これは、onclick属性が常に最初に実行されるためです。 Googleのような大規模なサイトでは、クリックを追跡し、ユーザーがマルウェアのサイトにアクセスできないようにしています。このため、何らかの理由で Ctrl +クリックが機能しません。ただし、マウスの中央ボタンを使用する場合は、ほとんどの場合に機能します。

3
imtheman