Do Česka se po 27 letech vrátil záškrt. Očkování z dětství nemusí stačit

7. 2. 2023

Sdílet

Autor: Depositphotos
Onemocnění záškrtem se v Česku léta nevyskytovalo, loňský rok to ale změnil. Příčinou je cestování, migrace a vyvanutí imunity vytvořené očkováním v dětství. Odborníci předpokládají, že onemocnění v zemi zaznamenají i v dalších letech. Doporučují proto, aby se při přeočkování proti tetanu používala vakcína, v níž by byl zastoupen i záškrt.

Záškrt je infekční onemocnění, jehož původcem jsou tři druhy bakterií a v minulosti patřil k hlavním příčinám dětské nemocnosti a úmrtnosti.

Co se dozvíte v článku
  1. První letošní případ onemocnění
  2. Proč se záškrt šíří
  3. Jak zabránit šíření záškrtu
  4. Kdy je vhodné nechat se přeočkovat
  5. Kdo způsobuje záškrt a jak se léčí
  6. Jak se přenáší záškrt

V České republice úřady podle portálu NZIP poslední případ záškrtu evidovaly v roce 1995. Loni se ale onemocnění vrátilo. Státní zdravotní ústav (SZÚ) ve statistikách uvádí pět případů nákazy.  Konkrétně šlo o čtyři případy kožní a jeden případ respirační formy záškrtu.

První letošní případ onemocnění

SZÚ v úterý 7. února v tiskové zprávě oznámil, že eviduje první případ záškrtu v roce 2023, a to v Olomouckém kraji. Národní referenční laboratoř vyhodnotila jako pozitivní vzorek přijatý k vyšetření 20. 1. 

„U pacienta z Olomouckého kraje se jedná o kožní formu infekce způsobenou bakterií Corynebacterium ulcerans (typ bakterie, kterou mohou přenášet i zvířata). Jednalo se o staršího imunosuprimovaného pacienta (tedy člověka s oslabenou imunitou) s nehojící se kožní ulcerací (vředovým ložiskem, pozn. red.) na dolní končetině,“ vysvětluje Jana Zavadilová, vedoucí Národní referenční laboratoře pro pertusi a difterii SZÚ. Výsledky SZÚ hlásil hygienické stanici, v jejíž kompetenci je přijetí takových opatření, aby se zabránilo dalšímu šíření.

Pozn.: Informace o prvním letošním případu záškrtu SZÚ vydal po uveřejnění tohoto textu, proto jsme jej v úterý 7. 2. 2023 dodatečně aktualizovali o tento box.

Výskyt onemocnění hlásily také další evropské státy. „Loni jej oznámilo například také Rakousko, Belgie, Německo, Francie, Itálie, Nizozemsko, Norsko, Španělsko, Velká Británie a Švýcarsko,“ vyjmenovává Kateřina Fabiánová, zástupkyně vedoucího Oddělení epidemiologie infekčních nemocí SZÚ.

Odborníci z řad lékařů, hygieniků a zástupců Ministerstva zdravotnictví a SZÚ proto sestavili a nyní zveřejnili písemné doporučení, jak postupovat, aby se předešlo dalšímu šíření záškrtu. V něm mimo jiné nabádají k přeočkování proti záškrtu v dospělosti.

VZP zjednodušila pravidla vyplácení bonusů na očkování. Kdy je můžete čerpat? Přečtěte si také:

VZP zjednodušila pravidla vyplácení bonusů na očkování. Kdy je můžete čerpat?

Proč se záškrt šíří

Jak je možné, že se onemocnění vrátilo, když v ČR patří očkování proti záškrtu mezi povinné, které dostávají děti už ve dvou měsících věku? Podle odborníků za to může časté cestování do zemí, kde není záškrt vymýcený, příchody uprchlíků a migrantů, váhání nad očkováním i vyvanutí imunity navozené očkováním v dětství.

„Záškrt nabývá celoevropsky na významu kvůli rostoucímu individuálnímu cestování i migračním vlnám ze zemí, kde je stále endemický, neboli v populaci se běžně vyskytující. To jsou například některé asijské země, zejména turisty oblíbená Indie, a z evropských zemí jde o Lotyšsko,“ uvádí tisková zpráva SZÚ s tím, že i v budoucnu je třeba s tímto onemocněním počítat.

Ukrajina, ze které kvůli válečnému konfliktu uprchlo do ČR statisíce lidí, k zemím s endemickým výskytem nepatří. Naopak před válečným konfliktem patřila k zemím, kde se děti proti záškrtu povinně očkovaly. „Současná data nijak neukazují, že by byla spojitost mezi šířením záškrtu a konkrétně Ukrajinou, říká mluvčí SZÚ Štěpánka Čechová. Dodává, že aktuální data z Ukrajiny sice nejsou k dispozici, před napadením Ruskem se v zemi vyskytovaly jen jednotky případů podobně jako jinde v Evropě.

Jak zabránit šíření záškrtu

Jedinou spolehlivou cestou ochrany je očkování. Nejde ale jen o individuální podávání vakcíny, ale o udržení vysoké proočkovanosti v celé zemi. „Kolektivní imunita navozená očkováním musí dosahovat 80 až 85 procent, aby nedocházelo v populaci k epidemiím,“ uvádí Doporučený postup při výskytu onemocnění záškrtem.

Bez jehel a v lékárnách, i tak by mohla vypadat budoucnost očkování Přečtěte si také:

Bez jehel a v lékárnách, i tak by mohla vypadat budoucnost očkování

Očkování proti záškrtu neexistuje samostatně, tedy ve formě tzv. monovakcíny, ale je vždy kombinováno s dalšími látkami – je součástí vakcíny proti tetanu, černému kašli, případně i proti přenosné dětské obrně.

V České republice je toto očkování povinné, a to u nejmenších dětí, které ji dostávají ve třech dávkách tzv. hexavakcíny. Ta kromě záškrtu chrání také před zmiňovaným tetanem, černým kašlem, dětskou obrnou, ale také žloutence typu B a onemocnění vyvolanému Haemophilus influenzae typu b. První dávku by mělo dostat dítě ve 2 měsících života, následuje přeočkování ve 4. a 11. až 13. měsíci života.

3D ilustrace bakterie Corynebacterium diphtheriae, která způsobuje záškrt, respirační infekce a také kožní léze.

3D ilustrace bakterie Corynebacterium diphtheriae, která způsobuje záškrt, respirační infekce a také kožní léze.

Autor: Depositphotos

U dospělých očkování proti záškrtu povinné není. Na rozdíl od vakcíny proti tetanu a černému kašli ovšem není také hrazené zdravotními pojišťovnami. Podle odborníků by se to mělo změnit a součástí přeočkování proti tetanu by mělo být i to proti záškrtu, a to v jedné vakcíně.

Státní zdravotní ústav připomíná, že děti jsou naposledy přeočkovány mezi 10. až 11. rokem života. Jenže imunita vytvořená tímto způsobem se postupně vytrácí, takže v dospělosti se riziko nákazy i u očkovaného člověka zvyšuje. Proto by se na přeočkování proti záškrtu mělo myslet i v dospělosti. Ostatně podobné doporučení už dříve zaznělo u černého kašle.

Kdy je vhodné nechat se přeočkovat

SZÚ uvádí, že přeočkování proti záškrtu by mělo u dospělých začínat v 25. roce života a následně by se mělo opakovat každých 10 let, a to doživotně. SZÚ přitom vychází z doporučení Světové zdravotnické organizace (WHO). „Při prvním přeočkování dospělých by bylo vhodné aplikovat kombinovanou vakcínu proti pertusi, difterii a tetanu, případně i proti přenosné dětské obrně,“ uvádí SZÚ.

Evropské středisko pro prevenci a kontrolu nemocí (ECDC) doporučuje posilovací dávku proti záškrtu cestovatelům, kteří se vydávají do zemí s endemickým výskytem nákazy, a zvláštní pozornost by měla být věnována i zdravotníkům, kteří jsou vystaveni většímu riziku kontaktu s bakterií.

Jak ovšem podotýká ředitelka SZÚ Barbora Macková, o přeočkování by se neměly zajímat jen výše uvedené dvě skupiny. „Ačkoli není v ČR přeočkování v dospělosti hrazeno ze zdravotního pojištění, je důležité upozornit na jeho potřebnost a vyzvat veřejnost k aktivnímu zájmu o tuto vakcínu,“ říká Barbora Macková.

Kdo způsobuje záškrt a jak se léčí

Původcem záškrtu jsou konkrétně tři druhy bakterií z rodu Corynebacterium. Konkrétně jde o C. diphteriae, C. ulcerans a C. pseudotuberculosis, přičemž poslední dvě jmenované patří k druhům, které se vyskytují primárně u zvířat.

Jak se přenáší záškrt

  • Nejčastěji při úzkém kontaktu kapénkovou cestou, při kašli nebo kýchání,
  • přímým kontaktem s pacientem nebo nosičem prostřednictvím infikovaných kožních lézí (bércové vředy, nehojící se kožní rány),
  • nepřímo prostřednictvím kontaminovaných předmětů a prádla nebo vzdušnou cestou,
  • nepasterizovanými mléčnými produkty,
  • kontaktem s infikovanými zvířaty.

Zdroj: Doporučený postup při výskytu případu onemocnění záškrtem

Od nakažení do vypuknutí nemoci uplyne zpravidla dva až pět dnů. Záškrt se nejčastěji projevuje jako těžká angina. Na rozdíl od ní ale vede k zúžení hrtanu i hltanu a následnému dušení. Mezi další příznaky onemocnění patří slabost, bolest v krku, horečka, zvětšené krční mandle a dýchací obtíže. Bakteriemi vylučované toxické látky se mohou dostat do krevního oběhu a poškodit i srdce, ledviny a centrální nervový systém.

Protože je onemocnění způsobeno bakteriemi, k léčbě se používají antibiotika. Léčba je důležitá i u pacientů, kteří sice jsou nakažení, neobjeví se u nich ale příznaky nemoci. Antibiotika totiž dokáží výrazným způsobem ovlivnit dobu, po kterou je pacient infekční.

„Lidé se záškrtem už obvykle nejsou nakažliví 48 hodin po začátku antibiotické terapie,“ upozorňuje v tiskové zprávě SZÚ s tím, že nakažlivost nemocného začíná koncem inkubační doby. Bez léčby trvá po celou dobu nemoci, obvykle 14 dní, ale vylučovat původce onemocnění může nakažená neléčená osoba až 6 měsíců.

Smrtnost onemocnění (podíl úmrtí z celkového počtu nakažených) se pohybuje mezi 5 až 10 procent; u dětí mladších 5 let věku a u osob nad 40 let dosahuje až 20 procent.

Stáli byste o možnost naočkovat se v lékárně?

Autor článku

Redaktorka Vitalia.cz. Vystudovala žurnalistiku a češtinu na Univerzitě Palackého v Olomouci, pracovala v Deníku, na webu TV Nova a iDNES.cz. Píše o zdravotnictví. Je držitelkou novinářských cen Psychiatrické společností ČLS JEP za rok 2021 a 2022. 

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »