每次刷新都先出现约 300ms 的白色背景,再跳成暗色,夜里特别明显,网速慢时能到 1 秒。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,主题判断脚本放在 body 末尾或打包进延迟加载的 bundle,CSS 已经渲染完才执行。浏览器先用默认浅色绘制首帧,脚本跑完才改属性。

碰到「暗色模式闪白」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

<script>
  const t = localStorage.getItem('theme');
  document.documentElement.dataset.theme = t || 'light';
</script>

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

具体做法是,把主题判断脚本内联到 head 里 放在样式表之前;脚本只读存储和系统偏好 同步设置根元素属性;用限速 3G 刷新 观察首帧是否还是白色。

最后用这个标准收尾,限速刷新时首帧就是暗色,不再出现白色闪屏。

作者 9823189