enhance(frontend): window.openやaタグにnoopenerオプションをつける (MisskeyIO#283)
This commit is contained in:
parent
3c79605460
commit
1c18b23912
|
@ -23,7 +23,7 @@ const query = ref(props.q);
|
|||
const search = () => {
|
||||
const sp = new URLSearchParams();
|
||||
sp.append('q', query.value);
|
||||
window.open(`https://www.google.com/search?${sp.toString()}`, '_blank');
|
||||
window.open(`https://www.google.com/search?${sp.toString()}`, '_blank', 'noopener');
|
||||
};
|
||||
</script>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
|
||||
<template>
|
||||
<component
|
||||
:is="self ? 'MkA' : 'a'" ref="el" style="word-break: break-all;" class="_link" :[attr]="self ? url.substring(local.length) : url" :rel="rel" :target="target"
|
||||
:is="self ? 'MkA' : 'a'" ref="el" style="word-break: break-all;" class="_link" :[attr]="self ? url.substring(local.length) : url" :rel="rel ?? 'nofollow noopener'" :target="target"
|
||||
:title="url"
|
||||
>
|
||||
<slot></slot>
|
||||
|
|
|
@ -112,7 +112,7 @@ const contextmenu = $computed(() => ([{
|
|||
icon: 'ti ti-external-link',
|
||||
text: i18n.ts.openInNewTab,
|
||||
action: () => {
|
||||
window.open(url + router.getCurrentPath(), '_blank');
|
||||
window.open(url + router.getCurrentPath(), '_blank', 'noopener');
|
||||
windowEl.close();
|
||||
},
|
||||
}, {
|
||||
|
|
|
@ -108,31 +108,31 @@ function showMenu(ev) {
|
|||
text: i18n.ts.impressum,
|
||||
icon: 'ti ti-file-invoice',
|
||||
action: () => {
|
||||
window.open(instance.impressumUrl, '_blank');
|
||||
window.open(instance.impressumUrl, '_blank', 'noopener');
|
||||
},
|
||||
} : undefined, (instance.tosUrl) ? {
|
||||
text: i18n.ts.termsOfService,
|
||||
icon: 'ti ti-notebook',
|
||||
action: () => {
|
||||
window.open(instance.tosUrl, '_blank');
|
||||
window.open(instance.tosUrl, '_blank', 'noopener');
|
||||
},
|
||||
} : undefined, (instance.privacyPolicyUrl) ? {
|
||||
text: i18n.ts.privacyPolicy,
|
||||
icon: 'ti ti-shield-lock',
|
||||
action: () => {
|
||||
window.open(instance.privacyPolicyUrl, '_blank');
|
||||
window.open(instance.privacyPolicyUrl, '_blank', 'noopener');
|
||||
},
|
||||
} : undefined, (!instance.impressumUrl && !instance.tosUrl && !instance.privacyPolicyUrl) ? undefined : null, {
|
||||
text: i18n.ts.help,
|
||||
icon: 'ti ti-help-circle',
|
||||
action: () => {
|
||||
window.open('https://misskey-hub.net/help.md', '_blank');
|
||||
window.open('https://misskey-hub.net/help.md', '_blank', 'noopener');
|
||||
},
|
||||
}], ev.currentTarget ?? ev.target);
|
||||
}
|
||||
|
||||
function exploreOtherServers() {
|
||||
window.open('https://join.misskey.page/instances', '_blank');
|
||||
window.open('https://join.misskey.page/instances', '_blank', 'noopener');
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ function onContextmenu(ev) {
|
|||
icon: 'ti ti-external-link',
|
||||
text: i18n.ts.openInNewTab,
|
||||
action: () => {
|
||||
window.open(props.to, '_blank');
|
||||
window.open(props.to, '_blank', 'noopener');
|
||||
},
|
||||
}, {
|
||||
icon: 'ti ti-link',
|
||||
|
|
|
@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
|
||||
<template>
|
||||
<component
|
||||
:is="self ? 'MkA' : 'a'" ref="el" :class="$style.root" class="_link" :[attr]="self ? props.url.substring(local.length) : props.url" :rel="rel" :target="target"
|
||||
:is="self ? 'MkA' : 'a'" ref="el" :class="$style.root" class="_link" :[attr]="self ? props.url.substring(local.length) : props.url" :rel="rel ?? 'nofollow noopener'" :target="target"
|
||||
@contextmenu.stop="() => {}"
|
||||
>
|
||||
<template v-if="!self">
|
||||
|
|
|
@ -120,7 +120,7 @@ const headerActions = $computed(() => [{
|
|||
text: i18n.ts.openInNewTab,
|
||||
icon: 'ti ti-external-link',
|
||||
handler: () => {
|
||||
window.open(file.url, '_blank');
|
||||
window.open(file.url, '_blank', 'noopener');
|
||||
},
|
||||
}]);
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ const headerActions = $computed(() => [{
|
|||
icon: 'ti ti-external-link',
|
||||
text: i18n.ts.dashboard,
|
||||
handler: () => {
|
||||
window.open(config.url + '/queue', '_blank');
|
||||
window.open(config.url + '/queue', '_blank', 'noopener');
|
||||
},
|
||||
}]);
|
||||
|
||||
|
|
|
@ -217,7 +217,7 @@ const headerActions = $computed(() => [{
|
|||
text: `https://${props.host}`,
|
||||
icon: 'ti ti-external-link',
|
||||
handler: () => {
|
||||
window.open(`https://${props.host}`, '_blank');
|
||||
window.open(`https://${props.host}`, '_blank', 'noopener');
|
||||
},
|
||||
}]);
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ function createPluginEnv(opts: { plugin: Plugin; storageKey: string }): Record<s
|
|||
}),
|
||||
'Plugin:open_url': values.FN_NATIVE(([url]) => {
|
||||
utils.assertString(url);
|
||||
window.open(url.value, '_blank');
|
||||
window.open(url.value, '_blank', 'noopener');
|
||||
}),
|
||||
'Plugin:config': values.OBJ(config),
|
||||
};
|
||||
|
|
|
@ -277,7 +277,7 @@ export function getNoteMenu(props: {
|
|||
icon: 'ti ti-external-link',
|
||||
text: i18n.ts.showOnRemote,
|
||||
action: () => {
|
||||
window.open(appearNote.url ?? appearNote.uri, '_blank');
|
||||
window.open(appearNote.url ?? appearNote.uri, '_blank', 'noopener');
|
||||
},
|
||||
} : undefined,
|
||||
{
|
||||
|
@ -381,7 +381,7 @@ export function getNoteMenu(props: {
|
|||
icon: 'ti ti-external-link',
|
||||
text: i18n.ts.showOnRemote,
|
||||
action: () => {
|
||||
window.open(appearNote.url ?? appearNote.uri, '_blank');
|
||||
window.open(appearNote.url ?? appearNote.uri, '_blank', 'noopener');
|
||||
},
|
||||
} : undefined]
|
||||
.filter(x => x !== undefined);
|
||||
|
|
|
@ -83,25 +83,25 @@ export function openInstanceMenu(ev: MouseEvent) {
|
|||
text: i18n.ts.impressum,
|
||||
icon: 'ti ti-file-invoice',
|
||||
action: () => {
|
||||
window.open(instance.impressumUrl, '_blank');
|
||||
window.open(instance.impressumUrl, '_blank', 'noopener');
|
||||
},
|
||||
} : undefined, (instance.tosUrl) ? {
|
||||
text: i18n.ts.termsOfService,
|
||||
icon: 'ti ti-notebook',
|
||||
action: () => {
|
||||
window.open(instance.tosUrl, '_blank');
|
||||
window.open(instance.tosUrl, '_blank', 'noopener');
|
||||
},
|
||||
} : undefined, (instance.privacyPolicyUrl) ? {
|
||||
text: i18n.ts.privacyPolicy,
|
||||
icon: 'ti ti-shield-lock',
|
||||
action: () => {
|
||||
window.open(instance.privacyPolicyUrl, '_blank');
|
||||
window.open(instance.privacyPolicyUrl, '_blank', 'noopener');
|
||||
},
|
||||
} : undefined, (!instance.impressumUrl && !instance.tosUrl && !instance.privacyPolicyUrl) ? undefined : null, {
|
||||
text: i18n.ts.help,
|
||||
icon: 'ti ti-help-circle',
|
||||
action: () => {
|
||||
window.open('https://misskey-hub.net/help.html', '_blank');
|
||||
window.open('https://misskey-hub.net/help.html', '_blank', 'noopener');
|
||||
},
|
||||
}, ($i) ? {
|
||||
text: i18n.ts._initialTutorial.launchTutorial,
|
||||
|
|
Loading…
Reference in a new issue