From 6b182ceba8e6974ed6c6ba8bbe6f9ab6c6413223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E6=82=A6?= Date: Tue, 6 Jan 2026 16:04:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=20Duration=20?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=EF=BC=9A=E5=9C=A8=20updateMediaSessionPositi?= =?UTF-8?q?on=20=E5=87=BD=E6=95=B0=E4=B8=AD=EF=BC=8C=E7=8E=B0=E5=9C=A8?= =?UTF-8?q?=E4=BC=9A=E5=85=88=E5=88=A4=E6=96=AD=20duration=20=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E4=B8=BA=E6=9C=89=E6=95=88=E7=9A=84=E6=AD=A3=E6=95=B0?= =?UTF-8?q?=E3=80=82=E5=A6=82=E6=9E=9C=20duration=20<=3D=200=EF=BC=8C?= =?UTF-8?q?=E5=88=99=E4=B8=8D=E5=86=8D=E8=B0=83=E7=94=A8=20setPositionStat?= =?UTF-8?q?e=EF=BC=8C=E9=81=BF=E5=85=8D=E8=A7=A6=E5=8F=91=E6=B5=8F?= =?UTF-8?q?=E8=A7=88=E5=99=A8=E7=9A=84=E9=94=99=E8=AF=AF=E8=A1=8C=E4=B8=BA?= =?UTF-8?q?=E3=80=82=20=E7=A7=BB=E9=99=A4=E4=BA=86=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=9A=84=E9=87=8D=E7=BD=AE=E8=B0=83=E7=94=A8=EF=BC=9A=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E4=BA=86=E5=9C=A8=E5=88=87=E6=AD=8C=E6=88=96=E6=B8=85?= =?UTF-8?q?=E7=A9=BA=E6=92=AD=E6=94=BE=E6=97=B6=E8=B0=83=E7=94=A8=E7=9A=84?= =?UTF-8?q?=20setPositionState({=20duration:=200=20...=20})=E3=80=82?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=20Media=20Session=20API=20=E8=A7=84=E8=8C=83?= =?UTF-8?q?=EF=BC=8Cduration=20=E5=BF=85=E9=A1=BB=E4=B8=BA=E6=AD=A3?= =?UTF-8?q?=E6=95=B0=EF=BC=8C=E4=BC=A0=E5=85=A5=200=20=E5=BE=80=E5=BE=80?= =?UTF-8?q?=E6=98=AF=E5=AF=BC=E8=87=B4=20Firefox=20=E9=9A=90=E8=97=8F?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=A0=8F=E6=8E=A7=E5=88=B6=E6=9D=A1=E7=9A=84?= =?UTF-8?q?=E4=B8=BB=E8=A6=81=E5=8E=9F=E5=9B=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 21c01f8..d1ab187 100644 --- a/index.html +++ b/index.html @@ -1152,14 +1152,20 @@ if (typeof navigator.mediaSession.setPositionState !== 'function') return; const audio = audioRef.current; if (!audio) return; + const duration = resolveDurationSeconds(audio, currentSongRef.current); + + // 兼容性修复:duration 必须为正有限数,否则某些浏览器(如 Firefox)会隐藏通知栏或报错 + if (!Number.isFinite(duration) || duration <= 0) return; + const position = Number.isFinite(audio.currentTime) ? audio.currentTime : 0; const playbackRate = Number.isFinite(audio.playbackRate) ? audio.playbackRate : 1; + try { navigator.mediaSession.setPositionState({ duration: duration, playbackRate: playbackRate, - position: duration > 0 ? Math.min(position, duration) : position + position: Math.min(position, duration) }); } catch (e) {} }; @@ -1245,10 +1251,10 @@ ] }); // Reset position state when song changes - try { navigator.mediaSession.setPositionState({ duration: 0, playbackRate: 1, position: 0 }); } catch(e) {} + // 注意:不要调用 setPositionState({ duration: 0 }),因为规范要求 duration 必须为正数 + // 错误的调用可能导致 Firefox 等浏览器隐藏播放控件 } else { navigator.mediaSession.metadata = null; - try { navigator.mediaSession.setPositionState({ duration: 0, playbackRate: 1, position: 0 }); } catch(e) {} } }, [currentSong]);