diff --git a/packages/frontend/src/theme.ts b/packages/frontend/src/theme.ts index fc3f5f55f2..e001bed8f3 100644 --- a/packages/frontend/src/theme.ts +++ b/packages/frontend/src/theme.ts @@ -144,7 +144,9 @@ export function applyTheme(theme: Theme, persist = true) { if (theme.id === currentThemeId && miLocalStorage.getItem('themeCachedVersion') === version) return; currentThemeId = theme.id; - if (window.document.startViewTransition != null) { + // visibilityStateがhiddenな状態でstartViewTransitionするとブラウザによってはエラーになる + // 通常hiddenな時に呼ばれることはないが、iOSのPWAだとアプリ切り替え時に(何故か)hiddenな状態で(何故か)一瞬デバイスのダークモード判定が変わりapplyThemeが呼ばれる場合がある + if (window.document.startViewTransition != null && window.document.visibilityState === 'visible') { window.document.documentElement.classList.add('_themeChanging_'); try { window.document.startViewTransition(async () => {