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: "「内容を隠す」がオンの場合は注釈の記述が必要です。"
|
cwNotationRequired: "「内容を隠す」がオンの場合は注釈の記述が必要です。"
|
||||||
doReaction: "リアクションする"
|
doReaction: "リアクションする"
|
||||||
wellKnownWebsites: "よく知られたウェブサイト"
|
wellKnownWebsites: "よく知られたウェブサイト"
|
||||||
wellKnownWebsitesDescription: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります。スラッシュで囲むと正規表現になります。一致した場合、外部サイトへのリダイレクトの警告を省略させることができます。"
|
wellKnownWebsitesDescription: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります。スラッシュで囲むと正規表現になります。ドメイン名だけ書くと後方一致になります。一致した場合、外部サイトへのリダイレクトの警告を省略させることができます。"
|
||||||
code: "コード"
|
code: "コード"
|
||||||
reloadRequiredToApplySettings: "設定の反映にはリロードが必要です。"
|
reloadRequiredToApplySettings: "設定の反映にはリロードが必要です。"
|
||||||
remainingN: "残り: {n}"
|
remainingN: "残り: {n}"
|
||||||
|
@ -9,19 +9,20 @@ import { defaultStore } from '@/store.js';
|
|||||||
import * as os from '@/os.js';
|
import * as os from '@/os.js';
|
||||||
import MkUrlWarningDialog from '@/components/MkUrlWarningDialog.vue';
|
import MkUrlWarningDialog from '@/components/MkUrlWarningDialog.vue';
|
||||||
|
|
||||||
|
const extractDomain = /^(https?:\/\/|\/\/)?([^@/\s]+@)?(www\.)?([^:/\s]+)/i;
|
||||||
const isRegExp = /^\/(.+)\/(.*)$/;
|
const isRegExp = /^\/(.+)\/(.*)$/;
|
||||||
|
|
||||||
export async function warningExternalWebsite(ev: MouseEvent, url: string) {
|
export async function warningExternalWebsite(ev: MouseEvent, url: string) {
|
||||||
const _url = new URL(url);
|
const domain = extractDomain.exec(url)?.[4];
|
||||||
|
const self = !domain || url.startsWith(local);
|
||||||
const self = url.startsWith(local);
|
|
||||||
const isWellKnownWebsite = self || instance.wellKnownWebsites.some(expression => {
|
const isWellKnownWebsite = self || instance.wellKnownWebsites.some(expression => {
|
||||||
const r = isRegExp.exec(expression);
|
const r = isRegExp.exec(expression);
|
||||||
if (r) {
|
if (r) {
|
||||||
return new RegExp(r[1], r[2]).test(url);
|
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) {
|
if (!self && !isWellKnownWebsite && !isTrustedByUser) {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
|
Loading…
Reference in New Issue
Block a user