mirror of
https://github.com/kokonect-link/cherrypick
synced 2025-01-21 17:23:56 +09:00
enhance(frontend): 外部サイトへのリンクは移動の警告の条件の調整 (MisskeyIO#564)
(cherry picked from commit 65978cbe61b7e86e25795948ee2ef34bdf6f846c)
This commit is contained in:
parent
a4cc88897b
commit
e010342c0e
@ -1200,7 +1200,7 @@ signupPendingError: "メールアドレスの確認中に問題が発生しま
|
||||
cwNotationRequired: "「内容を隠す」がオンの場合は注釈の記述が必要です。"
|
||||
doReaction: "リアクションする"
|
||||
wellKnownWebsites: "よく知られたウェブサイト"
|
||||
wellKnownWebsitesDescription: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります。スラッシュで囲むと正規表現になります。一致した場合、外部サイトへのリダイレクトの警告を省略させることができます。"
|
||||
wellKnownWebsitesDescription: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります。スラッシュで囲むと正規表現になります。ドメイン名だけ書くと後方一致になります。一致した場合、外部サイトへのリダイレクトの警告を省略させることができます。"
|
||||
code: "コード"
|
||||
reloadRequiredToApplySettings: "設定の反映にはリロードが必要です。"
|
||||
remainingN: "残り: {n}"
|
||||
|
@ -9,19 +9,20 @@ import { defaultStore } from '@/store.js';
|
||||
import * as os from '@/os.js';
|
||||
import MkUrlWarningDialog from '@/components/MkUrlWarningDialog.vue';
|
||||
|
||||
const extractDomain = /^(https?:\/\/|\/\/)?([^@/\s]+@)?(www\.)?([^:/\s]+)/i;
|
||||
const isRegExp = /^\/(.+)\/(.*)$/;
|
||||
|
||||
export async function warningExternalWebsite(ev: MouseEvent, url: string) {
|
||||
const _url = new URL(url);
|
||||
|
||||
const self = url.startsWith(local);
|
||||
const domain = extractDomain.exec(url)?.[4];
|
||||
const self = !domain || url.startsWith(local);
|
||||
const isWellKnownWebsite = self || instance.wellKnownWebsites.some(expression => {
|
||||
const r = isRegExp.exec(expression);
|
||||
if (r) {
|
||||
return new RegExp(r[1], r[2]).test(url);
|
||||
} else return expression.split(' ').every(keyword => url.includes(keyword));
|
||||
} else if (expression.includes(' ')) return expression.split(' ').every(keyword => url.includes(keyword));
|
||||
else return domain.endsWith(expression);
|
||||
});
|
||||
const isTrustedByUser = defaultStore.reactiveState.trustedDomains.value.includes(_url.hostname);
|
||||
const isTrustedByUser = defaultStore.reactiveState.trustedDomains.value.includes(domain);
|
||||
|
||||
if (!self && !isWellKnownWebsite && !isTrustedByUser) {
|
||||
ev.preventDefault();
|
||||
|
Loading…
Reference in New Issue
Block a user