@@ -57,6 +59,7 @@ import { defineComponent } from 'vue';
import { networkParam, Path } from 'src/router/routes';
import { useRouter } from 'vue-router';
import { useCampaign } from '../hooks';
+import { navigateInNewTab } from 'src/util-general';
// Import Swiper
import { Swiper, SwiperSlide } from 'swiper/vue';
@@ -73,10 +76,6 @@ export default defineComponent({
const router = useRouter();
const { combinedCampaigns } = useCampaign();
- const goToLink = (link: string): void => {
- window.open(link, '_blank');
- };
-
const goDappPageLink = (address: string | undefined): void => {
const base = networkParam + Path.DappStaking + Path.Dapp;
const url = `${base}?dapp=${address?.toLowerCase()}`;
@@ -86,7 +85,7 @@ export default defineComponent({
return {
modules: [Navigation],
combinedCampaigns,
- goToLink,
+ navigateInNewTab,
goDappPageLink,
};
},
diff --git a/src/staking-v3/components/dapp/DappV3.vue b/src/staking-v3/components/dapp/DappV3.vue
index 0383a7889..a5165419d 100644
--- a/src/staking-v3/components/dapp/DappV3.vue
+++ b/src/staking-v3/components/dapp/DappV3.vue
@@ -78,13 +78,7 @@ export default defineComponent({
const { getDapp, registeredDapps } = useDapps();
const { navigateToVote, navigateToHome } = useDappStakingNavigation();
const store = useStore();
-
const dappAddress = computed(() => route.query.dapp as string);
-
- const goLink = (url: string) => {
- window.open(url, '_blank');
- };
-
const dapp = computed(() => getDapp(dappAddress.value));
// Fetch full dApp model from API. Initially, store contains dapp with props required for the main page.
@@ -134,7 +128,6 @@ export default defineComponent({
return {
Path,
dapp,
- goLink,
navigateToVote,
isZkEvm,
twitterUrl,
diff --git a/src/staking-v3/components/dapp/ProjectDetails.vue b/src/staking-v3/components/dapp/ProjectDetails.vue
index 1951eecd0..408349dd7 100644
--- a/src/staking-v3/components/dapp/ProjectDetails.vue
+++ b/src/staking-v3/components/dapp/ProjectDetails.vue
@@ -15,7 +15,7 @@
:width="140"
:height="25"
class="button--website"
- @click="goLink(dapp.extended?.url ?? '/')"
+ @click="navigateInNewTab(dapp.extended?.url ?? '/')"
>
{{ $t('dappStaking.dappPage.goToWebsite') }}
@@ -194,6 +194,7 @@ import { computed, defineComponent, PropType } from 'vue';
import { useI18n } from 'vue-i18n';
import { CommunityType } from '@astar-network/astar-sdk-core';
import { CombinedDappInfo } from 'src/staking-v3/logic';
+import { navigateInNewTab } from 'src/util-general';
export default defineComponent({
props: {
@@ -243,15 +244,11 @@ export default defineComponent({
}
});
- const goLink = (url: string) => {
- window.open(url, '_blank');
- };
-
return {
sanitizeData,
getShortenAddress,
copyAddress,
- goLink,
+ navigateInNewTab,
explorerUrl,
communities,
virtualMachineTags,
diff --git a/src/util-general.ts b/src/util-general.ts
index a06225dd8..3c4e7be17 100644
--- a/src/util-general.ts
+++ b/src/util-general.ts
@@ -1,3 +1,5 @@
+const sanitizeUrl = (url: string): string => url.replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, '');
+
export const navigateInNewTab = (url: string): void => {
- window.open(url, '_blank', 'noopener noreferrer');
+ window.open(sanitizeUrl(url), '_blank', 'noopener noreferrer');
};