From 461737cfcb496bba8fa4956c936b830e125047df Mon Sep 17 00:00:00 2001 From: Noritaka Kobayashi Date: Thu, 11 Jun 2026 00:29:26 +0900 Subject: [PATCH 1/2] feat(gatsby): add functionality to open external links in a new tab with noopener and noreferrer --- gatsby-browser.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/gatsby-browser.js b/gatsby-browser.js index 53aa9a7ca..4798a7940 100644 --- a/gatsby-browser.js +++ b/gatsby-browser.js @@ -1,2 +1,34 @@ import 'react-tooltip/dist/react-tooltip.css' + +const siteOrigins = ['https://csv.js.org'] + +const isExternalHttpLink = (href) => { + try { + const url = new URL(href, window.location.href) + const origins = [window.location.origin, ...siteOrigins] + return ['http:', 'https:'].includes(url.protocol) && !origins.includes(url.origin) + } catch (e) { + return false + } +} + +const addNoopener = (anchor) => { + const rel = new Set((anchor.getAttribute('rel') || '').split(/\s+/).filter(Boolean)) + rel.add('noopener') + rel.add('noreferrer') + anchor.setAttribute('rel', Array.from(rel).join(' ')) +} + +const openExternalLinksInNewTab = () => { + document.querySelectorAll('a[href]').forEach((anchor) => { + if (!isExternalHttpLink(anchor.href)) { + return + } + anchor.setAttribute('target', '_blank') + addNoopener(anchor) + }) +} + +export const onInitialClientRender = openExternalLinksInNewTab +export const onRouteUpdate = openExternalLinksInNewTab From d12d81f541b44a69a7d215b0ed25e07e5b4f75bc Mon Sep 17 00:00:00 2001 From: Noritaka Kobayashi Date: Thu, 11 Jun 2026 07:38:24 +0900 Subject: [PATCH 2/2] fix(gatsby): remove noreferrer from external link attributes --- gatsby-browser.js | 1 - 1 file changed, 1 deletion(-) diff --git a/gatsby-browser.js b/gatsby-browser.js index 4798a7940..da22ac96b 100644 --- a/gatsby-browser.js +++ b/gatsby-browser.js @@ -16,7 +16,6 @@ const isExternalHttpLink = (href) => { const addNoopener = (anchor) => { const rel = new Set((anchor.getAttribute('rel') || '').split(/\s+/).filter(Boolean)) rel.add('noopener') - rel.add('noreferrer') anchor.setAttribute('rel', Array.from(rel).join(' ')) }