From 788c5660ba10c55284c40830d412801ec3b3dcd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Sat, 6 Sep 2025 14:46:24 +0900 Subject: [PATCH] =?UTF-8?q?enhance(frontend):=20=E3=83=95=E3=83=AD?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=A8=E3=83=B3=E3=83=89=E3=81=AE=E3=82=AD?= =?UTF-8?q?=E3=83=A3=E3=83=83=E3=82=B7=E3=83=A5=E3=82=AF=E3=83=AA=E3=82=A2?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E3=81=A7=E3=83=96=E3=83=A9=E3=82=A6=E3=82=B6?= =?UTF-8?q?=E3=81=AE=E5=86=85=E9=83=A8=E3=82=AD=E3=83=A3=E3=83=83=E3=82=B7?= =?UTF-8?q?=E3=83=A5=E3=82=82=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=20(#16522)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * enhance(frontend): フロントエンドのキャッシュクリア操作でブラウザの内部キャッシュも削除するように * 削除するキャッシュを増やす * Update Changelog * fix: 何らかのエラーがあっても無視するように --- CHANGELOG.md | 1 + .../backend/src/server/api/ApiServerService.ts | 11 +++++++++++ packages/frontend/src/utility/clear-cache.ts | 4 ++++ packages/misskey-js/etc/misskey-js.api.md | 4 ++++ packages/misskey-js/src/api.types.ts | 14 ++++++++++++-- 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7df4a3465..5ee7d4ec96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Enhance: AiScriptAppウィジェットで構文エラーを検知してもダイアログではなくウィジェット内にエラーを表示するように - Enhance: /flushページでサイトキャッシュをクリアできるようになりました - Enhance: クリップ/リスト/アンテナ/ロール追加系メニュー項目において、表示件数を拡張 +- Enhance: 「キャッシュを削除」ボタンでブラウザの内部キャッシュの削除も行えるように - Fix: プッシュ通知を有効にできない問題を修正 - Fix: RSSティッカーウィジェットが正しく動作しない問題を修正 - Fix: プロファイルを復元後アカウントの切り替えができない問題を修正 diff --git a/packages/backend/src/server/api/ApiServerService.ts b/packages/backend/src/server/api/ApiServerService.ts index 32818003ad..57d74ef2b1 100644 --- a/packages/backend/src/server/api/ApiServerService.ts +++ b/packages/backend/src/server/api/ApiServerService.ts @@ -176,6 +176,17 @@ export class ApiServerService { } }); + fastify.all('/clear-browser-cache', (request, reply) => { + if (['GET', 'POST'].includes(request.method)) { + reply.header('Clear-Site-Data', '"cache", "prefetchCache", "prerenderCache", "executionContexts"'); + reply.code(204); + reply.send(); + } else { + reply.code(405); + reply.send(); + } + }); + // Make sure any unknown path under /api returns HTTP 404 Not Found, // because otherwise ClientServerService will return the base client HTML // page with HTTP 200. diff --git a/packages/frontend/src/utility/clear-cache.ts b/packages/frontend/src/utility/clear-cache.ts index 8a62265438..8f1f73466f 100644 --- a/packages/frontend/src/utility/clear-cache.ts +++ b/packages/frontend/src/utility/clear-cache.ts @@ -4,6 +4,7 @@ */ import { unisonReload } from '@/utility/unison-reload.js'; +import { misskeyApiGet } from '@/utility/misskey-api.js'; import * as os from '@/os.js'; import { miLocalStorage } from '@/local-storage.js'; import { fetchCustomEmojis } from '@/custom-emojis.js'; @@ -16,6 +17,9 @@ export async function clearCache() { miLocalStorage.removeItem('theme'); miLocalStorage.removeItem('emojis'); miLocalStorage.removeItem('lastEmojisFetchedAt'); + await misskeyApiGet('clear-browser-cache', {}).catch(() => { + // ignore + }); await fetchInstance(true); await fetchCustomEmojis(true); unisonReload(); diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index d901232d8f..ac405c1fb0 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -1449,6 +1449,10 @@ export type Endpoints = Overwrite; res: AdminRolesCreateResponse; }; + 'clear-browser-cache': { + req: EmptyRequest; + res: EmptyResponse; + }; }>; // @public (undocumented) diff --git a/packages/misskey-js/src/api.types.ts b/packages/misskey-js/src/api.types.ts index fa803194bf..a842f0e47c 100644 --- a/packages/misskey-js/src/api.types.ts +++ b/packages/misskey-js/src/api.types.ts @@ -1,6 +1,12 @@ import { Endpoints as Gen } from './autogen/endpoint.js'; import { UserDetailed } from './autogen/models.js'; -import { AdminRolesCreateRequest, AdminRolesCreateResponse, UsersShowRequest } from './autogen/entities.js'; +import { + AdminRolesCreateRequest, + AdminRolesCreateResponse, + EmptyRequest, + EmptyResponse, + UsersShowRequest, +} from './autogen/entities.js'; import { PartialRolePolicyOverride, SigninFlowRequest, @@ -106,6 +112,10 @@ export type Endpoints = Overwrite< 'admin/roles/create': { req: Overwrite; res: AdminRolesCreateResponse; - } + }, + 'clear-browser-cache': { + req: EmptyRequest; + res: EmptyResponse; + }, } >;