target="_new"だと一回しか別タブで開かない問題(target="_blank"を使おう)
【結論】
・HTMLのリンクに対して、target="_new"を設定した場合、リンクを別タブで開いてくれる
・但し開いた別タブ内で、再度target="_new"を設定しているリンクは別タブで開かない
・何度も別タブで開く様にするには、target="_blank"を設定する
【目次】
【本題】
target="_new"だと一回しか別タブで開かない
HTMLにはtarget属性というリンクの表示先を指定するプロパティが存在します。
これを指定することで、リンクを別タブで開くことが可能になります。
以下が、target属性を指定した場合のサンプルコードです。
<a target="_new" href="/posts/new">記事を投稿</a>
しかし、このコードだと、別タブでリンクを開いた後、更に同じリンクを開くと、それは別タブでは開かなくなります。
今回は、この現象の原因と対策についてまとめます。
解決策:target="_blank"を使う
先に解決方法から説明します。それはtarget="_blank"
を使うことです。
<a `target="_blank"` href="/posts/new">記事を投稿</a>
こうすることで、リンクを踏むと毎回別タブが開く様になります。
原因:target属性で任意の名前を設定した場合、同じタブを更新してしまう
そもそも、HTMLのtarget属性は、表示先のブラウジング・コンテキスト(ウィンドウやタブ)を指定するものです。
target="_new"と設定した場合、まずnew
という名前のブラウジング・コンテキストを探し、無ければ新しくnew
という名前のブラウジング・コンテキストを作成します。
これにより、1回目は新しいタブが生成されます。
しかし、2回目以降は、既にnew
という名前のブラウジング・コンテキストが存在するので、そのページを更新するだけとなり、別タブを開きません。
ちなみに、名前は任意で設定できるので、new
以外でも(例えばhoge
など)でも同様の現象が発生します。
対して、target="_blank"
と設定した場合、毎回名前の無いブラウジング・コンテキストを新たに作成します。
その為、何回やっても新しいタブが生成されたのです。
なお、表示先のブラウジング・コンテキストをタブにするのか?ウィンドウにするのか?といった部分は、ブラウザに依存します。
今回試したGoogleChromeであれば、デフォルトでタブで開きますが、他ではそうならない可能性があるので注意が必要です。
参考情報
HTML5 & CSS3 リファレンス - target属性 (コンテンツを表示する対象)
target=”_blank” の正しい使い方講座 |SEO Japan by アイオイクス
target 属性(リンクの表示先を指定) | HTML (HTML Living Standard) タグリファレンス | W3 Watch Reference