mirror of
https://github.com/misskey-dev/misskey.git
synced 2024-12-25 22:22:51 +09:00
fix
This commit is contained in:
parent
1ed6ed6ef0
commit
7ef81ce6d3
@ -4,6 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { miLocalStorage } from '@/local-storage.js';
|
import { miLocalStorage } from '@/local-storage.js';
|
||||||
|
import { isEmbedPage } from '@/scripts/embed-page.js';
|
||||||
|
|
||||||
const address = new URL(document.querySelector<HTMLMetaElement>('meta[property="instance_url"]')?.content || location.href);
|
const address = new URL(document.querySelector<HTMLMetaElement>('meta[property="instance_url"]')?.content || location.href);
|
||||||
const siteName = document.querySelector<HTMLMetaElement>('meta[property="og:site_name"]')?.content;
|
const siteName = document.querySelector<HTMLMetaElement>('meta[property="og:site_name"]')?.content;
|
||||||
@ -21,7 +22,9 @@ export const version = _VERSION_;
|
|||||||
export const instanceName = siteName === 'Misskey' || siteName == null ? host : siteName;
|
export const instanceName = siteName === 'Misskey' || siteName == null ? host : siteName;
|
||||||
export const ui = miLocalStorage.getItem('ui');
|
export const ui = miLocalStorage.getItem('ui');
|
||||||
export const debug = miLocalStorage.getItem('debug') === 'true';
|
export const debug = miLocalStorage.getItem('debug') === 'true';
|
||||||
export const embedPage = location.pathname.startsWith('/embed');
|
// config.tsでインポートしているファイルと、その内部で使用される関数では使用できない。
|
||||||
|
// それらでembedPageの判定をしたい場合は関数を直接呼び出すこと
|
||||||
|
export const embedPage = isEmbedPage();
|
||||||
|
|
||||||
export function updateLocale(newLocale): void {
|
export function updateLocale(newLocale): void {
|
||||||
locale = newLocale;
|
locale = newLocale;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
import { isEmbedPage, initEmbedPageLocalStorage } from "@/scripts/embed-page.js";
|
import { isEmbedPage } from '@/scripts/embed-page.js';
|
||||||
|
|
||||||
export type Keys =
|
export type Keys =
|
||||||
'v' |
|
'v' |
|
||||||
@ -45,6 +45,9 @@ export type Keys =
|
|||||||
// セッション毎に廃棄されるLocalStorage代替(embedなどで使用)
|
// セッション毎に廃棄されるLocalStorage代替(embedなどで使用)
|
||||||
const safeSessionStorage = new Map<Keys, string>();
|
const safeSessionStorage = new Map<Keys, string>();
|
||||||
|
|
||||||
|
|
||||||
|
const embedPage = isEmbedPage();
|
||||||
|
|
||||||
export const miLocalStorage = {
|
export const miLocalStorage = {
|
||||||
getItem: (key: Keys): string | null => {
|
getItem: (key: Keys): string | null => {
|
||||||
if (embedPage) {
|
if (embedPage) {
|
||||||
@ -79,6 +82,24 @@ export const miLocalStorage = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (embedPage) {
|
if (embedPage) {
|
||||||
initEmbedPageLocalStorage();
|
/**
|
||||||
|
* EmbedページではlocalStorageを使用できないようにしているが、
|
||||||
|
* 動作に必要な値はsafeSessionStorageに移動する
|
||||||
|
*/
|
||||||
|
const keysToDuplicate: Keys[] = [
|
||||||
|
'v',
|
||||||
|
'instance',
|
||||||
|
'instanceCachedAt',
|
||||||
|
'lang',
|
||||||
|
'locale',
|
||||||
|
'localeVersion',
|
||||||
|
];
|
||||||
|
|
||||||
|
keysToDuplicate.forEach(key => {
|
||||||
|
const value = window.localStorage.getItem(key);
|
||||||
|
if (value && !miLocalStorage.getItem(key)) {
|
||||||
|
miLocalStorage.setItem(key, value);
|
||||||
|
}
|
||||||
|
});
|
||||||
if (_DEV_) console.warn('Using safeSessionStorage as localStorage alternative');
|
if (_DEV_) console.warn('Using safeSessionStorage as localStorage alternative');
|
||||||
}
|
}
|
||||||
|
@ -15,9 +15,10 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||||||
<div :class="$style.headerTitle" @click="top">
|
<div :class="$style.headerTitle" @click="top">
|
||||||
<I18n :src="i18n.ts.noteOf" tag="div" class="_nowrap">
|
<I18n :src="i18n.ts.noteOf" tag="div" class="_nowrap">
|
||||||
<template #user>
|
<template #user>
|
||||||
<a :href="`/@${user.username}`" target="_blank" rel="noopener noreferrer">
|
<a v-if="user != null" :href="`/@${user.username}`" target="_blank" rel="noopener noreferrer">
|
||||||
<MkUserName :user="user"/>
|
<MkUserName :user="user"/>
|
||||||
</a>
|
</a>
|
||||||
|
<span v-else>{{ i18n.ts.user }}</span>
|
||||||
</template>
|
</template>
|
||||||
</I18n>
|
</I18n>
|
||||||
<div :class="$style.sub">{{ i18n.tsx.fromX({ x: instanceName }) }}</div>
|
<div :class="$style.sub">{{ i18n.tsx.fromX({ x: instanceName }) }}</div>
|
||||||
|
@ -2,12 +2,14 @@
|
|||||||
* SPDX-FileCopyrightText: syuilo and misskey-project
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
import { miLocalStorage } from "@/local-storage.js";
|
|
||||||
import type { Keys } from "@/local-storage.js";
|
|
||||||
import { embedPage } from "@/config.js";
|
|
||||||
|
|
||||||
//#region Embed関連の定義
|
//#region Embed関連の定義
|
||||||
|
|
||||||
|
/** 埋め込みページかどうか */
|
||||||
|
export function isEmbedPage() {
|
||||||
|
return location.pathname.startsWith('/embed');
|
||||||
|
}
|
||||||
|
|
||||||
/** 埋め込みの対象となるエンティティ(/embed/xxx の xxx の部分と対応させる) */
|
/** 埋め込みの対象となるエンティティ(/embed/xxx の xxx の部分と対応させる) */
|
||||||
const embeddableEntities = [
|
const embeddableEntities = [
|
||||||
'notes',
|
'notes',
|
||||||
@ -36,6 +38,7 @@ export type EmbedParams = {
|
|||||||
header?: boolean;
|
header?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** 正規化されたパラメータ */
|
||||||
export type ParsedEmbedParams = Required<Omit<EmbedParams, 'maxHeight' | 'colorMode'>> & Pick<EmbedParams, 'maxHeight' | 'colorMode'>;
|
export type ParsedEmbedParams = Required<Omit<EmbedParams, 'maxHeight' | 'colorMode'>> & Pick<EmbedParams, 'maxHeight' | 'colorMode'>;
|
||||||
|
|
||||||
/** パラメータのデフォルトの値 */
|
/** パラメータのデフォルトの値 */
|
||||||
@ -48,6 +51,8 @@ export const defaultEmbedParams = {
|
|||||||
header: true,
|
header: true,
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
|
//#endregion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* パラメータを正規化する(埋め込みページ初期化用)
|
* パラメータを正規化する(埋め込みページ初期化用)
|
||||||
* @param searchParams URLSearchParamsもしくはクエリ文字列
|
* @param searchParams URLSearchParamsもしくはクエリ文字列
|
||||||
@ -84,30 +89,3 @@ export function parseEmbedParams(searchParams: URLSearchParams | string): Parsed
|
|||||||
...params,
|
...params,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* EmbedページではlocalStorageを使用できないようにしているが、
|
|
||||||
* 動作に必要な値はsafeSessionStorage(miLocalStorage内のやつ)に移動する
|
|
||||||
*/
|
|
||||||
export function initEmbedPageLocalStorage() {
|
|
||||||
if (!embedPage) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const keysToDuplicate: Keys[] = [
|
|
||||||
'v',
|
|
||||||
'lastVersion',
|
|
||||||
'instance',
|
|
||||||
'instanceCachedAt',
|
|
||||||
'lang',
|
|
||||||
'locale',
|
|
||||||
'localeVersion',
|
|
||||||
];
|
|
||||||
|
|
||||||
keysToDuplicate.forEach(key => {
|
|
||||||
const value = window.localStorage.getItem(key);
|
|
||||||
if (value && !miLocalStorage.getItem(key)) {
|
|
||||||
miLocalStorage.setItem(key, value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
@ -15,7 +15,7 @@ import { miLocalStorage } from '@/local-storage.js';
|
|||||||
|
|
||||||
const PREFIX = 'idbfallback::';
|
const PREFIX = 'idbfallback::';
|
||||||
|
|
||||||
let idbAvailable = typeof window !== 'undefined' ? !!(window.indexedDB && typeof window.indexedDB.open === 'function' && !embedPage) : true;
|
let idbAvailable = typeof window !== 'undefined' ? !!(window.indexedDB && typeof window.indexedDB.open === 'function') : true;
|
||||||
|
|
||||||
// iframe.contentWindow.indexedDB.deleteDatabase() がchromeのバグで使用できないため、indexedDBを無効化している。
|
// iframe.contentWindow.indexedDB.deleteDatabase() がchromeのバグで使用できないため、indexedDBを無効化している。
|
||||||
// バグが治って再度有効化するのであれば、cypressのコマンド内のコメントアウトを外すこと
|
// バグが治って再度有効化するのであれば、cypressのコマンド内のコメントアウトを外すこと
|
||||||
@ -27,7 +27,10 @@ if (window.Cypress) {
|
|||||||
console.log('Cypress detected. It will use localStorage.');
|
console.log('Cypress detected. It will use localStorage.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idbAvailable) {
|
if (embedPage) {
|
||||||
|
idbAvailable = false;
|
||||||
|
console.log('Embed page detected. It will use safeSessionStorage.');
|
||||||
|
} else if (idbAvailable) {
|
||||||
await iset('idb-test', 'test')
|
await iset('idb-test', 'test')
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
console.error('idb error', err);
|
console.error('idb error', err);
|
||||||
|
Loading…
Reference in New Issue
Block a user