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]);