症状
window.localStorage へのアクセス自体が例外を投げる環境で、画面が真っ白になる(#root の子要素が 0 件)。
コンソール:
The above error occurred in the <AppThemeProvider> component (src/theme/ThemeContext.tsx:25)
原因
apps/web/src/theme/ThemeContext.tsx の 20 / 24 / 29 / 33 行が localStorage を try/catch なしで触っている。保存領域が使えない状態だと、最初の描画で例外が飛んでアプリ全体が落ちる。
保存が禁じられた環境(拡張機能やブラウザ設定で保存領域を遮断している場合など)で起きうる。書き込みだけが失敗する状態(プライベートモード相当)では落ちないことは確認済み。
直し方
同じ端末設定を扱う他の箇所(apps/web/src/lib/useListColumns.ts:42-45、apps/web/src/lib/usePresenterPanel.ts:40-43、apps/web/src/i18n/languagePreference.ts)と同じく、読み書きを try/catch で包む。読めなければ既定のテーマ、書けなければそのセッションのみ反映でよい。
保存領域を触る箇所が増えるたびに同じ事故が起きるので、読み書きを1か所にまとめた薄いヘルパーに寄せることも検討する(同じ作法が現状4か所以上に散っている)。
補足
#354(表示言語の設定)の実機確認中に見つかった。#354 の変更が原因ではなく、それ以前から存在する。言語判定のほうは同じ状況でも落ちないことを確認済み。
症状
window.localStorageへのアクセス自体が例外を投げる環境で、画面が真っ白になる(#rootの子要素が 0 件)。コンソール:
原因
apps/web/src/theme/ThemeContext.tsxの 20 / 24 / 29 / 33 行がlocalStorageを try/catch なしで触っている。保存領域が使えない状態だと、最初の描画で例外が飛んでアプリ全体が落ちる。保存が禁じられた環境(拡張機能やブラウザ設定で保存領域を遮断している場合など)で起きうる。書き込みだけが失敗する状態(プライベートモード相当)では落ちないことは確認済み。
直し方
同じ端末設定を扱う他の箇所(
apps/web/src/lib/useListColumns.ts:42-45、apps/web/src/lib/usePresenterPanel.ts:40-43、apps/web/src/i18n/languagePreference.ts)と同じく、読み書きを try/catch で包む。読めなければ既定のテーマ、書けなければそのセッションのみ反映でよい。保存領域を触る箇所が増えるたびに同じ事故が起きるので、読み書きを1か所にまとめた薄いヘルパーに寄せることも検討する(同じ作法が現状4か所以上に散っている)。
補足
#354(表示言語の設定)の実機確認中に見つかった。#354 の変更が原因ではなく、それ以前から存在する。言語判定のほうは同じ状況でも落ちないことを確認済み。