Skip to content

PWA/ショートカット起動時に前回URL(おみくじ画面等)が復元されてしまう #197

Description

@ShinoharaTa

問題

PWA(ホーム画面追加)やショートカットから起動すると、start_url: "/" ではなく前回表示していたURL(例: /omikuji)がそのまま復元されてしまい、おみくじ画面が残った状態で起動する。

原因分析

  • web/nuxt.config.js:137-138 で manifest は start_url: "/" / display: "standalone" を指定しているが、クライアント側に起動時の画面リセット処理がない。standalone PWA は OS 側がセッションの最終URLを復元することがある。
  • web/static/sw.js(自己破壊型 Service Worker)が activate 時に client.navigate(client.url)現在URLへ再ナビゲートしている(static/sw.js:9-17)。このファイルは /sw.js として配信され、@nuxtjs/pwa が生成する workbox SW と同一パスで衝突している。
  • web/plugins/sw-update.client.js:17-27controllerchangewindow.location.reload() を実行するため、リロードも現在URL基準になる。

対応案

  1. web/static/sw.js の削除: 旧SWの掃除用(self-destroying SW)の役目は終えているはずで、workbox SW とのパス衝突を解消する。
  2. standalone 起動時の初期化プラグイン追加: window.matchMedia("(display-mode: standalone)") で PWA 起動を検知し、セッション初回(sessionStorage フラグで判定)かつ現在パスが /omikuji/sanpai などの途中画面なら / へリダイレクトするクライアントプラグインを追加する。
  3. 補助対応: omikuji.vue / sanpai.vuepageshow(event.persisted)を拾い、bfcache 復元時に状態を再初期化する。

確認方法

  • Android Chrome / iOS Safari の実機でホーム画面に追加 → /omikuji を表示した状態でアプリを完全終了 → 再起動し、トップ(/)が表示されること。
  • デスクトップ Chrome の PWA インストールでも同様に確認。
  • DevTools → Application → Service Workers で、登録されている /sw.js が workbox 生成のもの1つだけであること。
  • 通常のブラウザタブでのリロード・戻る操作では従来どおり現在URLが維持されること(リグレッション確認)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions