Infekční mononukleóza je známá jako nemoc z líbání. Jaké má příznaky?

21. 5. 2021 11:59
32 nových názorů
ručitel
MUDr. Daniel Petr | Odborný garant článku
„Infekční mononukleóza vás může potrápit i několik týdnů či měsíců.“

Infekční mononukleóza je způsobená virem EB (Epstein-Barrové), přenáší se slinami, ale propuká pouze v 5 případech ze 100. Projevuje se velkou únavou a zvětšením lymfatických uzlin. Průběh nemoci je povětšinou mírný, někdy ale může končit vážnějšími zdravotními komplikacemi. Z toho důvodu je důležité při podezření na onemocnění mononukleózou ihned navštívit lékaře. 

Co je mononukleóza?

Co se dozvíte v článku
  1. Co je mononukleóza?
  2. Příčiny mononukleózy
  3. Infekční mononukleóza: přenos
  4. Jaké má infekční mononukleóza příznaky?
  5. Komplikace mononukleózy
  6. Jaké má mononukleóza následky?
  7. Diagnostika mononukleózy
  8. Léčba mononukleózy
  9. Dieta při infekční mononukleóze
  10. Přechozená mononukleóza
  11. Chronická mononukleóza
  12. Mononukleóza a těhotenství

Infekční mononukleóza, někdy též nazývaná „nemoc z líbání“ či „líbací nemoc“ je virové onemocnění, způsobené z 90 % virem EB. Příznaky této nemoci mohou na první pohled připomínat třeba streptokokovou angínu, protože pacienty často trápí horečka a bolest v krku, ale infekční mononukleóza nereaguje na antibiotickou léčbu.

Onemocněním trpí povětšinou děti a mladiství, může se však vyskytnout i u lidí ve středním a starším věku. Ohroženi jsou především lidé s oslabenou imunitou. Rizikovou skupinou jsou pak lidé měnící často své sexuální partnery.

Ačkoliv se velice často objevuje infekční mononukleóza u dětí, nejpostiženější skupinou jsou ve skutečnosti mladí lidé ve věku od 15 do 24 let. Infekční mononukleóza u dospělých po čtyřicítce naopak bývá spíše vzácná. V České republice se přitom jedná o poměrně časté onemocnění, přičemž lékaři každý rok zaznamenají asi 2000 nových případů.

Co se týče protilátek, ty má ve vyspělých zemích zhruba 50 % dětí kolem pěti let a 90 až 95 % dospělých pacientů. V rozvojových oblastech naproti tomu dochází k promoření populace již v raném věku, takže se zde infekční mononukleóza vyskytuje jen velice zřídka.

Příčiny mononukleózy

V naprosté většině případů stojí za rozvojem tohoto onemocnění virus Epstein-Barrové (EBV). Má na svědomí asi 80 až 90 % případů infekční mononukleózy, přičemž podobně jako opar, neštovice nebo pásový opar patří do skupiny herpetických virů a běžně vegetuje v lidském organismu.

Těžko se rozeznává od jiných bakteriálních či virových onemocnění a stejně jako všechny herpetické viry po prodělání infekce zůstává nadále v organismu člověka. Přežívá v organismu a v případě stresu, nadměrné zátěže nebo snížení imunity (zkrátka při jakémkoliv výrazném oslabení organismu) hrozí, že se znovu aktivuje.

Menší procento případů pak představuje syndrom infekční mononukleózy, jehož rozvoj může způsobit celá řada různých patogenů. Patří sem například:

  • HIV,
  • HHV-6,
  • cytomegalovirus (CMV),
  • Toxoplasma gondii,
  • vzácnější adenoviry.

Infekční mononukleóza: přenos

Spoustu lidí zajímá, zda je mononukleóza nakažlivá a jakým způsobem mohou přijít s infekcí do kontaktu. Pokud jde o přenos mononukleózy, virus Epstein-Barrové se šíří prostřednictvím slin při úzkém kontaktu dvou lidí. Rizikovou aktivitou je tedy líbání, konzumace stejného jídla či nápoje nebo sdílení stejné cigarety mezi více lidmi. Právě proto se infekční mononukleóze často říká nemoc z líbání nebo třeba polibková nemoc.

Virus přitom infikuje epitel hltanu a dále postupuje do B-lymfocytů, jejichž pomocí se dále šíří po celém těle. Zasažené lymfocyty pak začnou produkovat protilátky, díky čemuž aktivují imunitní odpověď organismu a postupně infekci zlikvidují. Virová mononukleóza po sobě zanechává dlouhodobou imunitu, ale v těle zůstává část infikovaných lymfocytů, které se mohou stát zdrojem nákazy pro ostatní.

Infekční mononukleóza: inkubační doba

Podle různých zdrojů se inkubační doba mononukleózy může mírně lišit. Zatímco některé udávají, že se jedná o rozmezí od 4 dnů do 4 týdnů, jinde se naopak uvádí doba 30–50 dnů. Tento interval ale samozřejmě může být o mnoho kratší, což záleží na individuálním stavu pacienta.

Jak dlouho je člověk při mononukleóze infekční?

Nakažlivost pacienta s mononukleózou trvá většinou okolo šesti měsíců. Nicméně infekční může být i déle, virus se dlouho vyskytuje ve slinách rekonvalescentů či zdravých nosičů.

V době rekonvalescence, která by v závislosti na tíži průběhu onemocnění měla trvat nejméně 2 týdny, pacient již infekční není, ale měl by se vyvarovat všech aktivit, které by ho mohly zbytečně příliš vyčerpávat.

Měli jste někdy mononukleózu?

Jaké má infekční mononukleóza příznaky?

Pokud jde o to, jak se projevuje mononukleóza, tuto nemoc většinou odstartuje nadměrná zátěž organismu, nervové vyčerpání, oslabení obranyschopnosti nebo třeba stres. Počátek tedy může být náhlý, ale v některých případech se nemoc rozvíjí plíživě, přičemž ji doprovází celá řada nespecifických komplikací, jako je únava, bolest svalů, nechutenství či nevolnost.

Dále pak mezi projevy mononukleózy patří zvětšení lymfatických uzlin v oblasti třísel, podpaží a krku, což obvykle souvisí také s rozvojem horečky. Kromě toho způsobuje infekční mononukleóza bolest v krku, výrazné zvětšení mandlí a výsev oboustranných, bílých nebo šedavých povlaků. S tím se pak často pojí také obstrukce dýchacích cest.

Příznaky mononukleózy u dětí i dospělých jsou velice podobné jiným infekčním chorobám (především angíně). Během prvních dnů po nástupu tohoto onemocnění se pak objevují také otoky víček (Bassův příznak), drobné krevní výronky na patře (Holzelovo znamení) nebo třeba nepříjemná vyrážka. Dále může mononukleóza způsobit žloutenku, zápach z úst či zvětšení jater a sleziny.

Příznaky mononukleózy:

  • silná únava
  • bolest v krku
  • nateklé mandle
  • bolest pod pravým žebrem
  • drobná tečkovitá vyrážka na měkkém patře
  • zvětšení lymfatických uzlin na krku
  • zvětšení lymfatických uzlin v podpaží
  • zvětšení lymfatických uzlin v tříslech
  • zvětšení sleziny
  • zvětšení jater
  • horečka

Komplikace mononukleózy

Fatální průběh infekční mononukleózy je velice vzácný. Existují však případy, kdy je nutné vlivem komplikací pacienta hospitalizovat a nasadit speciální léčbu. Nejčastěji je na vině přílišné zvětšení krčních uzlin a mandlí, které se dotýkají, třou a způsobují obstrukci dýchacích cest. Mezi další možné komplikace způsobené infekční mononukleózou patří:

Jaké má mononukleóza následky?

Pokud jde o trvalé následky mononukleózy, nemoc sama o sobě žádné nezanechává, ale v pacientově těle nadále zůstává. V průběhu onemocnění si však tělo vytvořilo dostatek protilátek, které zajišťují doživotní imunitu, a opětovné propuknutí nemoci tedy většinou nehrozí. Následky se mohou objevit pouze v případě, že pacient nedodržuje lékařem předepsanou dietu, jeho játra pak mohou být trvale poškozena.

Diagnostika mononukleózy

Jak poznat mononukleózu? Při podezření na mononukleózu navštivte lékaře. Mononukleóza se diagnostikuje pomocí odběru krve, výtěru z krku a jaterních testů. V případě tohoto onemocnění se v krvi typicky objeví zvýšený počet bílých krvinek netypického tvaru tzv. mononukleárů, z čehož pochází název mononukleóza. Většinou jsou v krvi přítomny i protilátky, které jsou tvořeny imunitním systémem člověka.

V rámci sérologického vyšetření mají lékaři na výběr hned z několika různých metod. Heterofilní protilátky, které se tvoří u většiny pacientů trpících infekční mononukleózou způsobenou virem Epstein-Barrové, je možné prokázat díky Paul-Bunnelově reakci nebo pomocí OCH-Ericsonova testu. Dále se používá metoda ELISA a PCR.

Léčba mononukleózy

Léčba probíhá na několika stupních, bývá většinou pouze symptomatická a trvá přibližně 6 měsíců. První měsíc nemocný bývá doma a na celé 3 měsíce je pacientovi zakázána jakákoli sportovní aktivita. Onemocnění zároveň podléhá hlášení epidemiologickému odboru KHS.

Lékař předepíše na základě diagnózy léky. Pro snížení horečky se podávají antipyretika, dále je možné užívat hepatoprotektiva, a pokud se prokáže přítomnosti i jiné infekce, lékař předepíše antibiotika. Na únavu, která je pro mononukleózu typická a může být opravdu silná, je možno užívat některé léky či doplňky stravy, které zvyšují energii. Jedná se například o doplněk stravy Walmark Spektrum Energie.

Správnou funkci jater vám zajistí užívání doplňků stravy, jako je například Bio bylinné tonikum Ostropetřec mariánský nebo Játra-žlučník Bylinné kapky. Vyvarujte se kontaktním sportům, játra a slezina jsou křehké orgány, které se při mononukleóze většinou zduří a vysunou mimo své krytí za žebry. Tím se stávají více zranitelné. V neposlední řadě je velmi důležité neukončovat léčbu předčasně.

Dieta při infekční mononukleóze

Při infekční mononukleóze (a především pak při zvýšených jaterních testech) lékaři často doporučují jaterní dietu s omezením živočišných tuků. Tu je nutné dodržovat minimálně 6 měsíců do té doby, než dojde k regeneraci jaterních buněk a normalizaci jaterních testů. U některých pacientů však může i po odeznění akutního onemocnění přetrvávat nesnášenlivost k určitým druhům potravin.

Pacienti mají v důsledku nemoci oslabenou imunitu a potřebují dostatek energie, aby se mohli účinně bránit a co nejrychleji se vyléčit. V průběhu diety je nutné soustředit se na pravidelnou stravu, která bude rozložená v průběhu celého dne. Jídelníček by měl obsahovat především potraviny, které jsou bohaté na živiny, minerály a vitaminy.

Dieta při mononukleóze by se měla skládat zejména z kvalitních bílkovin, složitých cukrů, zeleniny a ovoce. Dodržujte také pitný režim – alespoň 2 litry tekutin denně. Vhodné jsou například zeleninové a ovocné šťávy nebo speciální bylinné čaje na obnovu jaterních buněk. Alkohol a kávu však budete muset oželet.

A co dalšího by neměl v případě mononukleózy jídelníček obsahovat? Snažte se vyhýbat především smaženým a tučnějším pečeným jídlům. Dále je důležité, aby během mononukleózy dieta obsahovala co nejméně živočišných tuků. Ty by měly být nahrazeny vhodnějšími tuky rostlinného původu. Kromě toho byste měli vynechat také slupky a ovoce obsahující zrníčka, dále pak příliš horké a ostré jídlo (například s ostrou paprikou nebo chilli).

Co se týče přípravy pokrmů, doporučuje se vaření jídel na vodě nebo dušení v páře, také byste se měli vyvarovat přílišného solení. Pokud se přeci jen rozhodnete připravit si jídlo na pánvi, nepoužívejte olej a maso opečte pouze na sucho.

Přechozená mononukleóza

Pokud se k léčbě mononukleózy přistupuje nezodpovědně, hrozí riziko následných zdravotních komplikací. Při nedodržování doporučeného režimu se pacient vystavuje nebezpečí opětovného propuknutí onemocnění.

Jaké má přechozená mononukleóza příznaky? Může dojít například ke zvětšení sleziny, která je po odeznění zánětu dočasně křehčí. Proto lékaři doporučují v průběhu 3 měsíců po vyléčení vynechat kontaktní sporty. Neléčená mononukleóza může také způsobit další komplikace:

Chronická mononukleóza

Pokud mononukleózu včas neodhalíte, může přejít i do chronické formy. Ta může vést až ke vzniku chronického únavového syndromu. Pokud je průběh onemocnění vážný, někdy je nutná i hospitalizace v nemocnici. Chronická mononukleóza je velice vzácná.

Mononukleóza a těhotenství

Toto onemocnění sice nepředstavuje riziko pro plod, může ale nebezpečně zvýšit riziko předčasného porodu. Matky často pociťují větší únavu, protože kvůli dietě nemají dostatečný přísun živin, které jsou v průběhu těhotenství potřebné. Symptomy mononukleózy mohou být také pociťovány výrazněji.

Olga Hošková (neregistrovaný)
Dobrý den, je mi 56let.Před 2 měsíci mi zalehlo ucho,bolelo mě v krku a měla jsem virózu. Na ucho jsem dostala prednison, bolela mě hlava a lícní kost, na MR byly zjištěné zánětlivé změny mastoidál.sklípků,dostala jsem antibiotika, vyžádala jsem si náběry krve, protože jsem byla vyčerpaná, hrozné návaly horka a únava. Krev nábrána 1.11. a 15.11mi řekli, že mám mononukleózu, přitom po operaci žlučníku užívám Emmaneru, teď beru antivirotika na 5 dní, ucho je stále zalehlé, hlava mě bolí a lícní kost také bolí. Celou dobu chodím do práce, pracuji s dětmi a už si nevím rady, hlavně jsem se dočetla, že se má být měsíc doma. O.
MUDr. Thai Bao Han (neregistrovaný)
Dobrý den, požádejte vašeho praktického lékaře o neschopenku, přeci jenom rekonvalescence po 50. roku je delší.
Marie (neregistrovaný)
Přechodila jsem mononukleózu, lékař si myslel, že mám hnisavou angínu. neměla jsem ani zvětšené uzliny a teplotu kolem 37 st. C. Za 2 měsíce jsem se osypala na krku, lékař si myslel, že mám sluneční alergii. Na kožním pak na základě protilátek zjistila, že jsou ji přechodila a vyrážka byla reakce na těla na protilátky. Celou dobu jsem ale byla v práci, mezi lidmi. Po kontrolních odběrech mi sdělili, že moje tělo se s mononukleózou úspěšně vyrovnalo.
Jan (neregistrovaný)
Dobrý den, na konci března mi byla diagnostikována mononukleoza. Měsíc jsem byl doma a dodržují dietu. Nicméně jaterní hodnoty jsou již opakovaně v normě a cítím se zdráv. Je nutné stále držet dietu? Játra a slezina dle sona také v pořádku.
MUDr. Thai Bao Han (neregistrovaný)
Dobrý den, přísná jaterní dieta se již nedoporučuje, nicméně racionální dietu dodržujte.
  • Našli jste v článku chybu?
'; 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'; } }
'; 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 »