import type { AdBannerType, AdSpotType } from '../runtime'; import { NicheHelper } from './niche-helper'; /** Хелпер для работы с баннерной (нативной) рекламой */ export class BannerHelper { /** Удаляет ранее вставленные скрипты баннера с указанным src */ private static cleanOldBanners(scriptUrl: string) { document.querySelectorAll('script').forEach(script => { if (script.src.includes(scriptUrl)) { script.remove(); } }); } /** Создаёт и вставляет в `` скрипт баннера (с задержкой 250мс, только на клиенте) */ private static attachBannerScript(scriptUrl: string) { const ridts = `?_ridts_=${Date.now()}`; const script = document.createElement('script'); const scriptAttrs = { type: 'text/javascript', async: 'async', src: scriptUrl + ridts, defer: 'defer', }; script.dataset.subid1 = '%subid1%'; Object.entries(scriptAttrs).forEach(([key, value]) => { script.setAttribute(key, value); }); if (import.meta.client) { setTimeout(() => { document.head.appendChild(script); }, 250); } } /** Возвращает идентификатор спота баннера по типу баннера и спота для дефолтной ниши сайта */ public static getBannerSpot(bannerType: AdBannerType, spotType: AdSpotType) { const _niche = NicheHelper.getSiteDefaultNiche(); const nicheConfig = useRuntimeConfig().public.adsConfig[bannerType][_niche]; if (nicheConfig) { return nicheConfig[spotType]; } return ''; }; /** Инициализирует баннер: чистит старые скрипты и подключает свежий */ public static async initBanner() { const domain = await AdvertsHelper.getAntiAdblockDomain(); const scriptUrl = `https://${domain}/fowuag19.js`; BannerHelper.cleanOldBanners(scriptUrl); BannerHelper.attachBannerScript(scriptUrl); } }