Skip to content

保存領域が遮断された環境でテーマの読み書きが例外を投げ、画面が真っ白になる #355

Description

@kojira

症状

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-45apps/web/src/lib/usePresenterPanel.ts:40-43apps/web/src/i18n/languagePreference.ts)と同じく、読み書きを try/catch で包む。読めなければ既定のテーマ、書けなければそのセッションのみ反映でよい。

保存領域を触る箇所が増えるたびに同じ事故が起きるので、読み書きを1か所にまとめた薄いヘルパーに寄せることも検討する(同じ作法が現状4か所以上に散っている)。

補足

#354(表示言語の設定)の実機確認中に見つかった。#354 の変更が原因ではなく、それ以前から存在する。言語判定のほうは同じ状況でも落ちないことを確認済み。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions