diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2025-08-01 17:20:40 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-01 17:20:40 +0900 |
| commit | e092008dc5768cb57b9eeb2ff70e5b831e0dfa24 (patch) | |
| tree | 9d5c4e33ee26219acd57b66e8f6fc0394bbd022a /packages/backend/src | |
| parent | enhance(frontend): いくつかの翻訳を調整 (diff) | |
| download | misskey-e092008dc5768cb57b9eeb2ff70e5b831e0dfa24.tar.gz misskey-e092008dc5768cb57b9eeb2ff70e5b831e0dfa24.tar.bz2 misskey-e092008dc5768cb57b9eeb2ff70e5b831e0dfa24.zip | |
feat(frontend): セーフモード (#16245)
* feat(frontend): セーフモード
* Update Changelog
* Update Changelog
* fix
* fix
* Update Changelog
* Update Changelog
* PWAのショートカット経由でもセーフモードで起動できるように
* Update ClientServerService.ts
---------
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Diffstat (limited to 'packages/backend/src')
| -rw-r--r-- | packages/backend/src/server/web/ClientServerService.ts | 4 | ||||
| -rw-r--r-- | packages/backend/src/server/web/boot.js | 56 | ||||
| -rw-r--r-- | packages/backend/src/server/web/manifest.json | 8 |
3 files changed, 52 insertions, 16 deletions
diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index 4d122b0fcf..768cfde701 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -188,6 +188,10 @@ export class ClientServerService { 'url': 'url', }, }, + 'shortcuts': [{ + 'name': 'Safemode', + 'url': '/?safemode=true', + }], }; manifest = { diff --git a/packages/backend/src/server/web/boot.js b/packages/backend/src/server/web/boot.js index 24794cbf2a..1a30e9ed2b 100644 --- a/packages/backend/src/server/web/boot.js +++ b/packages/backend/src/server/web/boot.js @@ -94,23 +94,37 @@ } //#endregion + let isSafeMode = (localStorage.getItem('isSafeMode') === 'true'); + + if (!isSafeMode) { + const urlParams = new URLSearchParams(window.location.search); + + if (urlParams.has('safemode') && urlParams.get('safemode') === 'true') { + localStorage.setItem('isSafeMode', 'true'); + isSafeMode = true; + } + } + //#region Theme - const theme = localStorage.getItem('theme'); - if (theme) { - for (const [k, v] of Object.entries(JSON.parse(theme))) { - document.documentElement.style.setProperty(`--MI_THEME-${k}`, v.toString()); + if (!isSafeMode) { + const theme = localStorage.getItem('theme'); + if (theme) { + for (const [k, v] of Object.entries(JSON.parse(theme))) { + document.documentElement.style.setProperty(`--MI_THEME-${k}`, v.toString()); - // HTMLの theme-color 適用 - if (k === 'htmlThemeColor') { - for (const tag of document.head.children) { - if (tag.tagName === 'META' && tag.getAttribute('name') === 'theme-color') { - tag.setAttribute('content', v); - break; + // HTMLの theme-color 適用 + if (k === 'htmlThemeColor') { + for (const tag of document.head.children) { + if (tag.tagName === 'META' && tag.getAttribute('name') === 'theme-color') { + tag.setAttribute('content', v); + break; + } } } } } } + const colorScheme = localStorage.getItem('colorScheme'); if (colorScheme) { document.documentElement.style.setProperty('color-scheme', colorScheme); @@ -127,11 +141,13 @@ document.documentElement.classList.add('useSystemFont'); } - const customCss = localStorage.getItem('customCss'); - if (customCss && customCss.length > 0) { - const style = document.createElement('style'); - style.innerHTML = customCss; - document.head.appendChild(style); + if (!isSafeMode) { + const customCss = localStorage.getItem('customCss'); + if (customCss && customCss.length > 0) { + const style = document.createElement('style'); + style.innerHTML = customCss; + document.head.appendChild(style); + } } async function addStyle(styleText) { @@ -159,9 +175,13 @@ otherOption1: 'Clear preferences and cache', otherOption2: 'Start the simple client', otherOption3: 'Start the repair tool', + otherOption4: 'Start Misskey in safe mode', }, locale?._bootErrors || {}); const reload = locale?.reload || 'Reload'; + const safeModeUrl = new URL(window.location.href); + safeModeUrl.searchParams.set('safemode', 'true'); + let errorsElement = document.getElementById('errors'); if (!errorsElement) { @@ -182,6 +202,12 @@ <p>${messages.solution4}</p> <details style="color: #86b300;"> <summary>${messages.otherOption}</summary> + <a href="${safeModeUrl}"> + <button class="button-small"> + <span class="button-label-small">${messages.otherOption4}</span> + </button> + </a> + <br> <a href="/flush"> <button class="button-small"> <span class="button-label-small">${messages.otherOption1}</span> diff --git a/packages/backend/src/server/web/manifest.json b/packages/backend/src/server/web/manifest.json index 41171d62a1..90d4530857 100644 --- a/packages/backend/src/server/web/manifest.json +++ b/packages/backend/src/server/web/manifest.json @@ -34,5 +34,11 @@ "text": "text", "url": "url" } - } + }, + "shortcuts": [ + { + "name": "Safemode", + "url": "/?safemode=true" + } + ] } |