Rizikový je každý nový partner, říká gynekoložka o infekci HPV

8. 9. 2021

Sdílet

ROZHOVOR – HPV virus nedokáže v organismu jen tak neškodně žít. Buď se ho tělo zbaví, nebo vytvoří přednádorovou změnu či nádor. „Zejména mladí lidé potřebují kondom a očkování,“ doporučuje prevenci lékařka Olga Dubová. Možnost nákazy představuje prakticky jakýkoli sexuální styk.

HPV viry jsou zákeřnější, než si většina z nás uvědomuje. Onkogenní typy tohoto viru dokáží způsobit rakovinu a jsou dokonce druhým nejvýznamnějším kancerogenem (faktorem způsobujícím nádory) hned po tabákovém kouři. Jsou zodpovědné za více než 95 % nádorů děložního čípku neboli děložního hrdla i za další typy nádorů.

Gynekologové dnes již spolehlivě odhalí infekci rizikovými kmeny viru pomocí testu na přítomnost jejich DNA. Ženy se však musí stále pečlivě hlídat a dál docházet na prohlídky, protože od infekce do rozvoje přednádorových změn uběhne průměrně pět až sedm let. Do rozvoje rakoviny jsou to dekády – deset až patnáct let. Ve spolupráci s ONKO Unií, která systematicky vzdělává veřejnost o prevenci, přibližuje rizika nákazy HPV i možnosti prevence Olga Dubová, gynekoložka z Fakultní nemocnice Bulovka v Praze.

Paní doktorko, můžete na úvod shrnout, jaká další onemocnění kromě zhoubného onemocnění děložního hrdla mohou HPV viry způsobovat? 

Onkogenní typy HPV způsobí také polovinu všech nádorů pochvy a vulvy (zevních rodidel) a neomezují se jen na ženy. U obou pohlaví totiž mohou způsobit rakovinu konečníku i kořene jazyka a mandlí, u mužů pak rakovinu penisu. Neonkogenní typy sice nezpůsobují rakovinu, ale některé z nich jsou příčinou nepříjemných genitálních bradavic a také bradavic v dýchacích cestách.

Myslíte si, že jsou lidé dostatečně informovaní o souvislosti HPV s nádorovým onemocněním? 

O příčinném vztahu HPV infekce a nádoru děložního hrdla víme již téměř padesát let. Řada lidí ale stále tuto souvislost podceňuje, ať už rozhodnutím neočkovat své děti, nebo nedostatečnou opatrností v sexuálním životě a vynecháváním gynekologické prevence. Je nutno dodat, že se jedná o pohlavně přenosnou infekci.

Jak je infekce virem v populaci častá?

Vzhledem k tomu, že se s ní během života setká 80 % populace, můžeme říct, že se jedná o světově nejrozšířenější pohlavně přenosnou nákazu.

Co brání jejímu šíření?

Jednoznačně především očkování. Avšak proočkovanost je v České republice nízká. V roce 2017 bylo naočkováno 64 % dívek a 30 % chlapců, a tato čísla klesají. Přitom rodiče mají jedinečnou možnost nechat své děti očkovat jediným očkováním proti rakovině, které v současnosti existuje. Z veřejného zdravotního pojištění je hrazeno očkování základní vakcínou u třináctiletých dívek a chlapců ve dvou dávkách. Vakcíny, které jsou v současnosti na trhu, předejdou více než 87 % případů rakoviny děložního hrdla.

U nás je očkování dívek hrazeno od roku 2012, u chlapců od roku 2018. Na to, abychom viděli efekt na pokles počtu nádorů děložního hrdla, si budeme ještě muset počkat, nicméně ve světě je efekt očkování zcela patrný. Například v Kanadě, kde se očkuje od roku 2007, poklesl počet těžkých přednádorových změn o 86 %. Podobně je tomu i v jiných zemích, jako je Austrálie, Finsko, Skotsko nebo USA.

Fakta o infekci HPV

  • HPV (Human papillomavirus) je nejčastěji přenosnou pohlavní infekcí. 
  • Většinou probíhá bezpříznakově, kromě rakoviny děložního čípku však může způsobit celou řadu chorob, jako jsou rakovina anu či genitální bradavice, a to jak u žen, tak u mužů. 
  • Právě očkování vzniku těchto komplikací z velké části zabraňuje. 
  • U chlapců i dívek je však důležité ho provést již v mladém věku, nejlépe ještě před zahájením sexuálního života. 
  • V současnosti jsou na trhu tři vakcíny proti HPV. Rozsah ochrany je dán počtem typů HPV, proti kterým vakcína chrání: bivalentní Cervarix (chrání proti 2 typům HPV), kvadrivalentní Gardasil (dříve Silgard, chrání proti 4 typům HPV) a nonavalentní Gardasil9 (chrání proti 9 typům HPV).
  • Vakcína Cervarix je hrazená z veřejného zdravotního pojištění mezi 13. a 14. rokem věku, ostatní vakcíny se doplácejí.

Jaký pohlavní styk je z medicínského pohledu rizikový pro nákazu HPV? 

K nákaze může dojít už během prvního pohlavního styku v životě. Rizikový je kromě vaginálního styku i styk orální a anální. Riziko samozřejmě roste přímo úměrně tomu, jak často žena střídá partnery. Potíž je v tom, že viry nejsou vidět, na člověku nelze tuto infekci poznat. A abychom si nechali otestovat partnera předtím, než s ním máme pohlavní styk, to nikdo nedělá. Nikdo není tak uvědomělý, ani nejsme od přírody takto nastavení.

Údajně se drtivá většina žen infekce zbaví – zlikviduje ji imunitní systém. Jaké faktory způsobují, že se organismus s infekcí nevypořádá? 

To je důležitá otázka. 80 % z nás HPV infekci potká. Kdo z nás je tedy ohrožen nádorem a proč? Mezi faktory, které se na tom podílejí, je časná koitarché, tedy začátek pohlavního života před sedmnáctým rokem života. Mělo by jednoznačně zaznít, že pro sedmnáctileté dívky není v tomto ohledu ideální pouze tabletová antikoncepce – měly by se chránit kondomem nebo kombinací tabletové antikoncepce a kondomu současně. Tkáň děložního čípku je v mládí citlivější k infekci. Dále imunitu proti HPV nepříznivě ovlivňuje také kouření a rovněž střídání partnerů, neboť rizikový je z tohoto pohledu každý nový partner. Dále vrozené nebo získané poruchy imunity, včetně užívání imunosupresiv, tedy léků potlačujících imunitu používaných při autoimunitních onemocněních.

Jaký je mechanismus, kterým kouření zvyšuje riziko rozvoje přednádorových změn a nádoru? 

Oslabuje slizniční imunitu a poškozuje buňky děložního hrdla. Vedlejší produkty tabáku byly nalezeny v hlenu na sliznici děložního hrdla žen, které kouří. Vědci se domnívají, že tyto látky poškozují DNA buněk, do které se snaží své DNA začlenit virus HPV. Kouření také snižuje celkovou účinnost imunitního systému v boji proti infekcím HPV.

V populaci je mnoho žen, které nejsou naočkované. Bylo jim víc než třináct let, když se proti HPV začalo plošně očkovat, a nyní se dodatečně očkovat nechtějí. Jaká opatření životního stylu mohou pomoci snížit riziko infekce a zhoubného onemocnění?

Každé očkování je svobodné rozhodnutí a nejdůležitější je vůle pacienta. Každý z nás má právo se rozhodnout, jestli se bude či nebude řídit doporučeními odborníků, která jsou vždy postavena na důkazech. Základem prevence pro neočkované ženy, ale i ženy vakcinované, je chodit na každoroční preventivní kontroly ke gynekologovi. Infekce HPV probíhá skrytě mnoho let a přednádorové změny, které je možné účinně ošetřit, zachytí jen lékař. Ve většině případů probíhají zcela bez příznaků.

Riziko infekce jako takové lze snížit tím, že se žena vyhne střídání sexuálních partnerů, bude používat kondom při rizikovém pohlavním styku, nebude kouřit a bude si hlídat varovné příznaky.

Varovné příznaky infekce HPV

  • Jsou jimi nepravidelné krvácení nebo špinění, vodnatý výtok a krvácení po pohlavním styku.
  • U žen po přechodu by mělo být vyšetřeno jakékoliv krvácení, tedy i jednorázové, dokonce i slabé špinění.

Během každoročních preventivních kontrol odebírá gynekolog stěr z děložního hrdla pro laboratorní vyšetření hrazené pojišťovnou. Všechny ženy bez rozdílu věku mají nárok na cytologické vyšetření, které má za úkol odhalit změny buněk. Ženy ve věku 35 a 45 let mají nárok také na vyšetření HPV DNA, které analýzou DNA zjišťuje přítomnost infekce rizikovými kmeny viru. Můžete popsat, co ženu čeká v případě negativního a pozitivního výsledku těchto testů? 

Pokud má žena pozitivní cytologii, tedy jsou přítomny nějaké změny na děložním hrdle, ale je negativní HPV test, jde většinou o změny způsobené zánětem a mohou být vyléčeny antibiotiky.

Pokud je pozitivní cytologie a také pozitivní HPV DNA test, závisí další postup především na stupni přednádorových změn. Ty se dělí na dva základní stupně. Mírné změny většinou pouze pravidelně sledujeme, abychom měli jistotu, že se nezhoršují. Těžké přednádorové změny ošetřujeme chirurgicky tzv. konizací (viz dále v boxu). Žena je pak po dobu jednoho až dvou let pečlivěji sledována, než ji považujeme za zdravou.

Konizace děložního čípku

  • Jde o odstranění části poškozeného děložního hrdla ve tvaru kuželu (latinsky konus, proto je výkon označován jako konizace).
  • Jedná se o výkon v celkové anestezii, který trvá asi deset minut.
  • Odstraněním kuželu tkáně děložního hrdla a jeho mikroskopickým vyšetřením lékaři definitivně potvrdí závažnost přednádorových změn, nebo mohou objevit už agresivní nádor. Zároveň tak zjistí, jestli byla odstraněna všechna poškozená tkáň, tedy jestli okraje daného kuželu jsou již zdravé.

Ženy s HPV negativním testem a normálním nálezem na děložním hrdle (cytologií a kolposkopií – pohledem na děložní hrdlo přes mikroskop) jsou nízkorizikové z pohledu vzniku karcinomu děložního hrdla.

Ženy s pozitivním HPV testem a normálním nálezem na děložním hrdle (cytologie, kolposkopie) jsou také sledovány standardně. Mladé ženy se obvykle HPV infekce spontánně zbaví. U žen po přechodu je vhodné s pacientkou konzultovat možnost chirurgického ošetření čípku. Do deseti let se až u 15 % žen s agresivnějšími typy HPV viru (HPV 16, 18) vyvine těžká přednádorová změna na děložním hrdle. Tedy ženy s pozitivním HPV testem by měly pečlivě dbát na dodržování pravidelných preventivních prohlídek. Rozhodně nic nepodceňte!

HPV virus, pokud není odstraněn imunitním systémem, nedokáže v našem těle dlouhodobě přežívat, aniž by nevytvořil přednádorovou změnu nebo nádor. Tedy buď se ho tělo zbaví, nebo HPV virus „v těle zlobí“. Nedokáže si v organismu jen tak neškodně žít.

Po létě bývá vyšší incidence pohlavních nákaz v důsledku vyšší míry sociálních kontaktů. Pohlavně se přenáší také HPV, dá se tedy říct, že během léta dochází k nárůstu počtu přenosů? 

Má-li žena více sexuálních partnerů než v jiném období, pak zcela jednoznačně ano.

Měly by si matky otevřeně promluvit se svými nezletilými dcerami, zda měly rizikový pohlavní styk? A měly by jim v takovém případě zaplatit u gynekologa HPV test, aby byla infekce odhalena co nejdříve? 

Nemá cenu testovat náctiletou dívku. 80 % z nich infekci potká, a proto můžou být HPV pozitivní. Většina z nich se infekce dokáže zbavit. Problémem jsou ty, u nichž v těle HPV virus přetrvává. Jak jsme si už říkali, HPV virus nedokáže v našem těle jen neškodně žít. Je-li v těle dlouho, začne zlobit – vznikají přednádorové změny nebo zhoubný nádor děložního hrdla.

Myslím, že problémem je neinformovanost matek. Asi každá matka se svou náctiletou dcerou řeší antikoncepci a prevenci nechtěného otěhotnění. Málokterá si ovšem uvědomí, že z dlouhodobého pohledu je HPV infekce větším problémem než těhotenství.

U mladé ženy začínající žít sexuálním životem by měla být jako první možnost zvolena bariérová antikoncepce, tedy kondom. Čípek u mladých dívek je citlivější k nákaze HPV než u zralých žen. A samozřejmě, děvčata i chlapci ve věku třinácti let by měli být očkovaní proti HPV. Tedy ještě před zahájením pohlavního života. Dnes jsou na trhu pouze vakcíny preventivní, tedy takové, které u očkovaných zabrání nákaze a udržení viru v těle. Tedy ženu, která již potkala HPV infekci, této infekce nezbaví. Ovšem i pro ni má očkování význam! Zabrání totiž nové nákaze.

Očkování je tedy doporučeno i ženám, které již infekci mají nebo ji překonaly, a také ženám, které již podstoupily konizaci pro přednádorovou změnu. U žen po tomto zákroku, které jsou zaočkované, je až šestkrát nižší riziko návratu těžkých přednádorových změn v porovnání se ženami, které se nedají očkovat.

MUDr. Olga Dubová

Absolvovala Lékařskou fakultu Univerzity Komenského v Bratislavě. Pracuje na Gynekologicko-porodnické klinice 1. LF UK a Fakultní nemocnice Bulovka, kde se věnuje převážně onkogynekologii. Je odbornou asistentkou 1. LF UK a členkou mezinárodních a národních odborných společností. Členka správní rady ONKO Unie, která systematicky vzdělává veřejnost o prevenci nákazy HPV.

Autor článku

Všeobecné dotazy, připomínky a tipy směřujte na adresu [email protected].

Tiskové zprávy zasílejte na e-mail [email protected].

'; 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 »