From b77a7215109b9dca97c90d1e5a6f1963deb71c8b Mon Sep 17 00:00:00 2001 From: qian Date: Sat, 13 Jun 2026 20:37:26 +0800 Subject: [PATCH] =?UTF-8?q?improve(pay):=E5=9C=A8=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E4=B8=AD=E6=89=93=E5=BC=80=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/tenant/src/utils/payment.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/web/tenant/src/utils/payment.ts b/web/tenant/src/utils/payment.ts index 1826fc6..c3c184a 100644 --- a/web/tenant/src/utils/payment.ts +++ b/web/tenant/src/utils/payment.ts @@ -1,3 +1,12 @@ +/** + * 是否为 Safari 浏览器。 + * Safari 下"axios 异步请求完成后再提交 target=_blank 表单"常被静默拦截 + * (新标签页打不开,用户卡住),故 Safari 上沿用当前页提交,其它浏览器在新标签页打开。 + */ +function isSafariBrowser(): boolean { + return /^((?!chrome|android).)*safari/i.test(navigator.userAgent) +} + /** * 以 POST 表单方式把支付参数提交到支付网关。 * @@ -14,6 +23,11 @@ export function submitPaymentForm(url: string, params: Record): const form = document.createElement('form') form.action = url form.method = 'POST' + // 在新标签页打开支付页,保留当前控制台不被覆盖;支付完成后由 return_url + // 在新标签页回到 /console/wallet 展示结果。Safari 例外(见 isSafariBrowser)。 + if (!isSafariBrowser()) { + form.target = '_blank' + } Object.entries(params || {}).forEach(([key, value]) => { const input = document.createElement('input') input.type = 'hidden'