Krev v moči byste neměli podceňovat. Často signalizuje vážné onemocnění

27. 8. 2023 9:00
přidejte názor

Má vaše moč nezvyklou barvu nebo jste v ní dokonce objevili stopy krve? V tom případě byste měli okamžitě vyhledat svého ošetřujícího lékaře. Tato zdravotní komplikace totiž může mít celou řadu různých méně či více závažných příčin a zároveň často signalizuje nějaké nebezpečné onemocnění.  

Co znamená krev v moči?

Co se dozvíte v článku
  1. Co znamená krev v moči?
  2. Další příznaky hematurie
  3. Jaké může mít krev v moči příčiny?
  4. Jak zjistit krev v moči?
  5. Krev v moči léčba
  6. Krev v moči u dětí

Moč se vytváří v ledvinách a její vylučování slouží k odstraňování odpadních látek z lidského těla. U zdravých pacientů vypadá jako čirá tekutina, která může mít různé odstíny žluté barvy. V závislosti na koncentraci tedy bývá bledě slámová až jantarová. Pokud se ovšem v moči vyskytuje také krev, což se označuje názvem hematurie, obvykle změní barvu, nicméně nemusí být úplně sytě červená.

Přítomnost krve v moči může být v některých případech viditelná na první pohled. Takový nález se poté označuje jako makroskopická hematurie. Poznáte ho podle toho, že se objeví růžová moč nebo červená moč a v některých případech se může dokonce zbarvit až do tmavě hněda (může barvou připomínat čaj nebo i kofolu). Kromě toho se mohou objevit pouze kapky krve nebo dokonce sražená krev v moči.

Co se týče mikroskopické hematurie (také označovaná jako mikroskopická krev v moči), tu prostým okem nepostřehnete. Barva moči se totiž nijak výrazně nezmění. Takový stav obvykle lékař zachytí jako náhodný nález při chemickém vyšetření moči a močového sedimentu.

Vždy je ovšem nutné mít na paměti, že krev v moči představuje pouze příznak jiných zdravotních obtíží, a ne samostatné onemocnění. Červené krvinky v moči přitom mohou signalizovat třeba zdravotní problémy, které souvisí s ledvinami, močovodem, močovou trubicí nebo prostatou. Pokud moč obsahuje také bílé krvinky, na vině bude s největší pravděpodobností infekce močových cest. [1, 2, 3, 45]

Další příznaky hematurie

Přítomnost krve v moči může být doprovázena celou řadou dalších příznaků. Jedná se například o krev v moči a bolest zad, přičemž někdy způsobuje choroba zodpovědná za krev v moči bolest v podbřišku. Dále vyvolává krev v moči pálení, křeče, zvýšenou teplotu či dokonce horečky. U některých zdravých pacientů se však může objevit krev v moči bez bolesti. [6, 7, 89]

Jaké může mít krev v moči příčiny?

Některé příčiny hematurie jsou pouze dočasné problémy, které nejsou příliš nebezpečné a po nějaké době zmizí, ať už s léčbou nebo dokonce i bez ní. Jiné však patří mezi kritické stavy, u nichž je nutné zahájit speciální léčbu a pacienta dlouhodobě sledovat.

Látky, které mohou změnit barvu moči

Zbarvení lidské moči ovlivňují například různé potraviny a léky. Červenohnědou barvu může mít moč třeba po konzumaci červené řepy, ostružin nebo rebarbory, způsobit ji však mohou i léčiva, jako je třeba Pyrvinium. Někdy se může objevit také krev v moči po antibiotikách či projímadlech. Při výdeji takového léku by vás však měl lékárník o těchto vedlejších účincích dopředu informovat.

Za změnu barvy moči může být zodpovědná také přítomnost volného hemoglobinu, což se odborně nazývá hemoglobinurie (hemoglobin v moči). V některých případech se totiž červené krvinky rozpadají, hemoglobin se z nich uvolňuje a jeho přebytek je následně z těla vylučován močí, která se tím pádem barví do červena či hněda. Hemoglobinurii mohou způsobit třeba hemolytické anémie.

Kromě hemoglobinu mohou barvu moči měnit i jiné látky vytvářené v lidském těle. Jedná se například o bilirubin, jehož přítomnost může signalizovat poškození jater. Tento nález je závažný a vyžaduje důkladné vyšetření. Nejedná se však o hematurii. Dále může mít obtíže na svědomí myoglobin, což je malá bílkovina, která v srdci a kosterních svalech váže kyslík, z krve může být filtrována ledvinami a dostává se do moči. Vysoké množství této látky pak může způsobit její červenou barvu.

Onemocnění a další závažné příčiny

Stopy krve v moči se mohou objevit také vlivem mnoha dalších příčin. Na vině může být vyčerpávající fyzická zátěž, expozice toxickým látkám (kontrastní léky při RTG vyšetření) nebo úraz ledviny či močového měchýře. Přechodná přítomnost krve v moči může být způsobena také lékařským výkonem, který poškozuje vylučovací ústrojí. Jedná se například o krev v moči po cévkování nebo po biopsii ledviny.

U obou pohlaví se může krev v moči vyskytnout při poranění zevního genitálu nebo při poranění konečníku. Riziko krvácení do močových cest může zvýšit také užívání některých léků, jako jsou nesteroidní protizánětlivé přípravky (NSAID) či aspirin. Lidé si někdy stěžují také na krev v moči po běhání, krev v moči po sexu nebo krev v moči po požití alkoholu.

Krev se může do moči dostat z vylučovacího ústrojí, které zahrnuje ledviny a močové cesty (močovody, močový měchýř, močová trubice). Přítomnost krve v moči může v tom případě signalizovat také některé závažné onemocnění. Může se jednat například o tyto problémy:

Krev v moči u mužů a u žen

Viditelná krev v moči se může vyskytnout u každého pacienta. Větší riziko čůrání krve však obecně hrozí ženám, které mají kratší močovou trubici než muži a více tak trpí na záněty močových cest. Krev v moči u žen se dále objevuje během menstruace a výjimečná není ani krev v moči po styku.

Co se týče mužů, nejohroženější jsou pacienti nad 50 let. Krev v moči u mužů totiž bývá spojena se zvětšením prostaty. Mezi další příčiny se pak řadí například zánět prostaty nebo rakovina. Znečištění moči krví ovšem může být způsobeno také hemoroidy. [10, 11, 12, 13, 14, 15]

Zaznamenali jste někdy krev v moči?

Jak zjistit krev v moči?

Jakmile se vaše moč zbarví do červena, do hněda nebo dokonce do černa, může to být známkou toho, že obsahuje také krev. Takový nález můžete zkusit otestovat sami, ale poté je třeba co nejdříve kontaktovat praktického lékaře, který rozhodne o dalším postupu.

Jak poznat krev v moči? Hematurii můžete jednoduše sami vyšetřit prostřednictvím indikačního papírku. Tento test na krev v moči zakoupíte v každé lékárně a snadno díky němu rozpoznáte, zda je přítomna krev a bílkovina v moči. Toto je ale samozřejmě pouze dočasné řešení. Ať už ve vašem případě odhalí krev v moči papírky z lékárny, potíže neustávají nebo se přidají také doprovodné obtíže, je načase co nejrychleji vyhledat odborníka.

Nemocný, který opakovaně krev v moči zachytí, by měl vždy urychleně vyhledat urologa. Ten následně provede důkladné vyšetření a rozbor moči. Pokud se příčinu nepodaří odhalit ani urologovi, pacient je poslán k nefrologovi, což je specialista na nemoci a léčbu ledvin. Ten může přistoupit také k doplňujícím vyšetřením, jako je CT, magnetická rezonance nebo cystoskopie. U mužů je na místě i vyšetření prostaty, zatímco u žen se vždy provádí také gynekologické vyšetření.

Používané diagnostické metody:

  • vyšetření moči (posouzení vzhledu, chemický rozbor),
  • vyšetření koncentrace kreatininu a močoviny v krevním séru,
  • kompletní krevní obraz (vyšetření krevních buněk a destiček),
  • vyšetření bílkoviny či albuminu v moči,
  • odhad glomerulární filtrace,
  • kultivační vyšetření moči,
  • cytologické vyšetření moči,
  • specifická vyšetření k odhalení příčiny hematurie,
  • nelaboratorní vyšetření (cystoskopie, ultrazvuk, CT…). [16, 17, 18, 19, 20]
Krev ve stolici nikdy nepodceňujte. Příčina může být banální, ale i smrtelná
Přečtěte si také:

Krev ve stolici nikdy nepodceňujte. Příčina může být banální, ale i smrtelná

Krev v moči léčba

Jak se zbavit krve v moči? Léčba hematurie je ve většině případů zaměřena na příčinu, která tento nepříjemný stav způsobila. Proto je nutné navštívit lékaře, jenž určí přesnou diagnózu a navrhne nejlepší řešení vašeho zdravotního problému, případně vás nechá hospitalizovat.

Pokud se jedná o infekci močových cest, předepisují se antibiotika a v lékárnách je možné zakoupit také doplňky stravy, které je vhodné užívat, jakmile se dostaví první příznaky nebo jako preventivní opatření. Jedná se například o přípravky Urinal, Uroval nebo Mega Brusinky. K léčbě zánětů je dobrá také lichořeřišnice či diuretické čajové směsi. Ty by se však neměly užívat dlouhodobě, jelikož dráždí ledviny k větší produkci moči.

Během léčby zvětšené prostaty lze kromě léků užívat také různé doplňky stravy, jako je například Prostamol uno či Prostenal, které obsahují extrakt z palmy Serenoa repens. Dále se doporučují čaje s vrbovkou, olej z dýňových semínek nebo extrakt z kopřivy. [21, 22, 23, 24, 25]

Krev v moči u dětí

Viditelná krev v moči se může objevit také u malých dětí. I v případě těchto pacientů může mít její přítomnost různé důvody. Jedná se například o:

  • abnormálně vyvinuté močové cesty,
  • cysta nebo parenchymový můstek,
  • vyšší hladina minerálů v moči,
  • infekce močových cest,
  • horečnaté onemocnění,
  • imunitní záněty ledvin.

Stejně jako u dospělých by v případě, že najdete krev v moči u dítěte, měla následovat okamžitá návštěva lékaře, který malého pacienta vyšetří a zvolí vhodnou léčbu. [26, 27, 28, 29]

Zdroje: lekarnickekapky.cz, stefajir.cz, labtestsonline.cz, pennmedicine.org, mayoclinic.org, healthline.com, childrenshospital.org, kidney.org, ncbi.nlm.nih.gov, kidshealth.org

  • Žádné názory
  • 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 »