diff --git a/src/pages/go.astro b/src/pages/go.astro index f04ac37..97346af 100644 --- a/src/pages/go.astro +++ b/src/pages/go.astro @@ -27,7 +27,7 @@ const whitelist = externalLinkWhitelist.map((domain) => domain.toLowerCase());
- 返回首页 + 返回上一页
@@ -42,6 +42,7 @@ const whitelist = externalLinkWhitelist.map((domain) => domain.toLowerCase()); (() => { const params = new URLSearchParams(window.location.search); const rawUrl = params.get('url') || params.get('target') || params.get('to') || ''; + const rawFrom = params.get('from') || ''; const title = document.querySelector('[data-title]'); const message = document.querySelector('[data-message]'); const statusLabel = document.querySelector('[data-status-label]'); @@ -51,6 +52,7 @@ const whitelist = externalLinkWhitelist.map((domain) => domain.toLowerCase()); const countdown = document.querySelector('[data-countdown]'); const ring = document.querySelector('[data-countdown-ring]'); const continueLink = document.querySelector('[data-continue]'); + const backLink = document.querySelector('[data-back]'); const circumference = 2 * Math.PI * 52; function setText(node, text) { @@ -71,6 +73,24 @@ const whitelist = externalLinkWhitelist.map((domain) => domain.toLowerCase()); setText(message, text); } + let returnUrl = '/'; + try { + const fromUrl = new URL(rawFrom, window.location.origin); + if (fromUrl.origin === window.location.origin && fromUrl.pathname !== window.location.pathname) { + returnUrl = `${fromUrl.pathname}${fromUrl.search}${fromUrl.hash}`; + } + } catch { + returnUrl = '/'; + } + + if (backLink) backLink.href = returnUrl; + + backLink?.addEventListener('click', (event) => { + if (window.history.length <= 1) return; + event.preventDefault(); + window.history.back(); + }); + let destination; try { destination = new URL(rawUrl); diff --git a/src/styles/site.css b/src/styles/site.css index ca4f5e3..fd4c031 100644 --- a/src/styles/site.css +++ b/src/styles/site.css @@ -2316,7 +2316,7 @@ meting-js { position: relative; width: 112px; height: 112px; - margin-top: 26px; + margin: 26px auto 0; } .external-redirect-countdown svg { diff --git a/static/js/external-links.js b/static/js/external-links.js index 3068a67..4c9ad82 100644 --- a/static/js/external-links.js +++ b/static/js/external-links.js @@ -32,7 +32,7 @@ event.preventDefault(); - const redirectUrl = `${redirectPath}?url=${encodeURIComponent(externalUrl)}`; + const redirectUrl = `${redirectPath}?url=${encodeURIComponent(externalUrl)}&from=${encodeURIComponent(window.location.href)}`; const target = anchor.getAttribute('target'); if (target && target !== '_self') {