外部リンクにtarget=_blank,rel=noopener,アイコンを追加する
タイトルの通りですが,外部リンクはaタグにいろいろ付けなければいけません.
target="_blank"
だけでは,セキュリティ,パフォーマンスの問題があるので,rel="noopener "
も追加します.
外部アイコンはお好みです.
実装
jQueryは使用せず,Vanilla JSです.
target_blank.html
<script>
document.addEventListener('DOMContentLoaded', function() {
// httpから始まるaタグのうち、[target="_blank"]のついていないaタグが対象
// 内部リンクは、「/」から始める前提なので無視
document.querySelectorAll('a[href^=http]:not([target="_blank"])').forEach( atag => {
// 外部リンクを必ず新しいタブで開く
atag.setAttribute('target', '_blank');
// 別プロセスで開く (下は,noreferrerを付ける場合)
atag.setAttribute('rel', 'noopener');
// atag.setAttribute('rel', 'noopener noreferrer');
// クラスを追加して,外部リンクアイコンを表示
atag.classList.add('externalLinkIcon');
})
});
</script>
style.css
.externalLinkIcon::after {
content: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZXh0ZXJuYWwtbGluayI+PHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiPjwvcGF0aD48cG9seWxpbmUgcG9pbnRzPSIxNSAzIDIxIDMgMjEgOSI+PC9wb2x5bGluZT48bGluZSB4MT0iMTAiIHkxPSIxNCIgeDI9IjIxIiB5Mj0iMyI+PC9saW5lPjwvc3ZnPg==");
padding-left: 3px;
padding-right: 5px;
}
svgは,base64にしています.
ファイルを読み込む場合は,content: url("/external-link.svg");
svgはこちらのサイトを利用させていただきました.