summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/web
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2025-08-01 17:20:40 +0900
committerGitHub <noreply@github.com>2025-08-01 17:20:40 +0900
commite092008dc5768cb57b9eeb2ff70e5b831e0dfa24 (patch)
tree9d5c4e33ee26219acd57b66e8f6fc0394bbd022a /packages/backend/src/server/web
parentenhance(frontend): いくつかの翻訳を調整 (diff)
downloadmisskey-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/server/web')
-rw-r--r--packages/backend/src/server/web/ClientServerService.ts4
-rw-r--r--packages/backend/src/server/web/boot.js56
-rw-r--r--packages/backend/src/server/web/manifest.json8
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"
+ }
+ ]
}