Rakovina jícnu je tichý zabiják. Podle čeho ji můžete včas odhalit?

1. 5. 2020 9:00
přidejte názor
ručitel
MUDr. Daniel Petr | Odborný garant článku
„Maligní nádory jícnu nejsou sice v našich končinách až tak časté, nicméně prognóza tohoto onemocnění není dobrá.“

Rakovina jícnu je závažné nádorové onemocnění, které nejčastěji trápí muže ve věku od 50 do 70 let. Zpočátku probíhá bez jakýchkoliv příznaků, kvůli čemuž lékaři problém obvykle nejsou schopní odhalit včas. Později se však dostaví výrazné polykací obtíže, bolest v krku, nevolnost či vykašlávání krve a pacienti již nemohou normálně přijímat potravu. Léčba zahrnuje chirurgické zákroky, radioterapii i chemoterapii.

Nádory jícnu

Co se dozvíte v článku
  1. Nádory jícnu
  2. Epidemiologie
  3. Příčina rakoviny jícnu
  4. Jaké má rakovina jícnu příznaky?
  5. Diagnostika
  6. Léčba rakoviny jícnu
  7. Rakovina jícnu: prognóza přežití
  8. Prevence rakoviny jícnu

Jícen je elastická trubice, která představuje jednu ze součástí našeho trávicího traktu. Je uložen za průdušnicí, spojuje hltan se žaludkem a slouží především k transportu potravy pomocí peristaltických vln, což jsou pravidelné stahy jícnu, které jídlo vlnovitě sunou dále. Od chvíle, kdy člověk sousto spolkne, stačí pouze 5–10 sekund, aby potrava doputovala jícnem až do žaludku.

Obecně se nádory dělí na benigní (nezhoubné) a maligní (zhoubné). Pokud jde o první skupinu, v případě jícnu to mohou být intramurální nádory, jako je fibrom, lipom či hemangiom, nebo také intraluminální nádory neboli polypy, kam patří třeba adenom, myxom či papilom. Žádné z nich obvykle nepůsobí pacientům větší obtíže, vzácně se však objevují poruchy polykání či krvácení.

Jako karcinom jícnu se označují zhoubné nádory, které se mohou objevit v kterékoliv jeho části. Nejčastěji se jedná o spinocelulární karcinom, který vzniká z dlaždicobuněčné výstelky vnitřní části jícnu. Méně často to poté může být adenokarcinom, jenž je vytvořen ze žlázek ve stěně jícnu, nebo také smíšený typ.

Epidemiologie

Podle statistik trápí rakovina jícnu spíše mužskou část populace a nejčastěji se vyskytuje u pacientů ve věku 50–70 let. Jedná se o poměrně vzácné onemocnění, které se ve většině případů objevuje ve středním hrudním jícnu nebo v jeho spodní třetině. Na rozdíl od západní Evropy a Severní Ameriky jsou k rakovině jícnu poté více náchylní lidé v asijských zemích a v některých částech Afriky.

Příčina rakoviny jícnu

Na vzniku rakoviny jícnu se podle lékařů podílí jak genetika, tak i nezdravý životní styl. Podobně jako u jiných nádorů se totiž karcinom jícnu pojí s genetickou odchylkou, přičemž často se jedná o gen APC. Výrazný vliv však mají také rizikové faktory, kam patří především kouření, konzumace tvrdého alkoholu nebo kombinace obojího. Karcinom se ovšem může vyvinout i z jiného chronického onemocnění jícnu.

Rizikové faktory:

  • Kouření
  • Nadměrná konzumace alkoholu
  • Žvýkání tabáku a betelu
  • Obezita
  • Časté pití horkých nápojů
  • Nadměrná konzumace kořeněných jídel
  • Nedostatek vitamínů, ovoce a zeleniny

Pokud jde o rakovinu jícnu, rizikovým faktorem pro vznik adenokarcinomu je také refluxní ezofagitida, kdy u pacientů dochází k návratu trávicích šťáv ze žaludku do jícnu a jeho následnému podráždění. To může vést až ke stavu, který se označuje jako Barettův jícen, kdy v souvislosti s refluxní ezofagitidou dochází k metaplazii dlaždicového epitelu na cylindrický (podobný jako ve střevech). Riziko vzniku adenokarcinomu je u osob s Barettovým jícnem 30‒40krát vyšší.

Na vznik rakoviny jícnu dále může mít vliv dlouhodobá achalázie, která způsobuje ochrnutí svalů jícnu, jeho zúžení a poruchu průchodnosti. Kromě toho mohou situaci ovlivnit také chemické příčiny, jako je poleptání jícnu kyselinou či louhem. Na pozoru by se ovšem měli mít i pacienti trpící Sjögrenovým, Kellyho-Patersonovým či Plummer-Vinsonovým syndromem.

Jak často si dopřáváte pálivá a silně kořeněná jídla?

Jaké má rakovina jícnu příznaky?

Ve většině případů nepůsobí karcinom jícnu pacientům zpočátku žádné výraznější obtíže. Právě z toho důvodu obvykle vyhledají lékaře až ve chvíli, kdy je onemocnění již v pokročilé fázi nebo je na léčbu dokonce příliš pozdě. Příznaky se často začínají objevovat až ve chvíli, kdy nádor dosáhne určité velikosti.

Jak se pozná rakovina jícnu? S tím, jak se nádor postupně zvětšuje, se u pacientů začínají objevovat první příznaky, jako je dysfagie neboli ztížené polykání. Nejprve vázne polykání tuhých soust, v pokročilejších stádiích však lidé mají problém i s konzumací tekuté a kašovité stravy. Součástí obtíží může být i nepříjemná bolest v krku a chrapot.

Kromě ztíženého polykání se v pokročilejších stádiích přidává i nevolnost, zvracení a zvýšená únava. Stolice pacientů je černá, velmi zapáchá a někdy se v ní může objevit i krev. Znatelný je také výrazný úbytek na váze, jelikož nemocní nejsou schopní přijímat potravu normálním způsobem. Neobvyklý není ani tlak za hrudní kostí či ztížené dýchání. V pozdějším stádiu se jícen může dokonce i protrhnout.

Typické příznaky rakoviny jícnu:

  • Ztížené polykání
  • Bolest v krku a chrapot
  • Pocit plnosti
  • Tlak za hrudní kostí
  • Nevolnost a zvracení
  • Neschopnost přijímat potravu
  • Podvýživa
  • Zvýšená únava
  • Celková slabost
  • Černá a páchnoucí stolice
  • Kašel a vykašlávání krve
  • Dýchací obtíže

Rakovina jícnu a metastázy

Ačkoliv se zhoubné nádory v jícnu a žaludku vyskytují méně často než třeba v tlustém střevě, rozhodně to neznamená, že by byly méně nebezpečné. Nádor totiž může přes stěnu jícnu prorůstat do okolních orgánů, kdy často zasáhne také žaludek, dýchací trubici a velké cévy, které jícen obklopují.

Buňky uvolňované do mízy nádor mohou zanést do nejbližších mízních uzlin a krev poté zhoubné buňky dopraví také do vzdálenějších orgánů, kde vzniknout metastázy. U pacientů s rakovinou jícnu bývají nejčastěji postižené plíce a játra, ale i mozek a kosti.

Diagnostika

K odhalení správné diagnózy lékařům slouží celková anamnéza pacienta včetně důkladného fyzikálního vyšetření. Následují další testy, jako je například:

  • Laboratorní vyšetření krve
  • Kontrastní rentgenové vyšetření jícnu
  • Endoskopie s biopsií (ezofagoskopie)
  • Endosonografie jícnu
  • CT hrudníku a břicha

Pokud se rakovina jícnu u pacienta potvrdí, je nezbytné provést další vyšetření. Ta slouží ke zjištění přesného rozsahu zhoubného nádoru a dále také k odhalení možných metastáz. Většinou se provádí CT, PET či rentgen plic, ultrazvuk jater a v případě podezření na kostní metastázy také scintigrafie. Teprve poté mohou lékaři zvolit vhodnou léčbu.

Léčba rakoviny jícnu

Pokud je u pacienta diagnostikována rakovina jícnu, léčba a její úspěšnost závisí na tom, v jakém stádiu se onemocnění nachází. Základními metodami, které se v terapii tohoto druhu rakoviny využívají, jsou chirurgie, radioterapie a chemoterapie. Lékaři ovšem obvykle volí jejich kombinaci.

Chirurgický zákrok

Jestliže je karcinom jícnu odhalen brzy, v časnějších stádiích lze provést chirurgické odstranění nádoru. Tato operace rakoviny jícnu se nazývá ezofagektomie. Jedná se o odstranění nádoru i s přilehlou částí jícnu, okolními lymfatickými uzlinami a dalšími tkáněmi, které by mohly být postižené. Zbylou část jícnu je poté nutné napojit na žaludek.

V případě, že je nádor již příliš velký a nelze ho odstranit, se provádí bypassové operace. Lékaři během nich vytvoří zcela novou cestu, kudy může potrava do žaludku směřovat, aby se postiženému místu co nejvíce vyhnula. Mohou také pacientům zavést endoprotézu nebo tzv. stent, což je trubička, která se roztáhne, přitlačí nádor blíže ke stěně jícnu a alespoň částečně ho tak opět zprůchodní. To zajistí úlevu při polykání.

Další možnost představuje uvolnění jícnu prostřednictvím laserového paprsku, které se provádí endoskopickou cestou. Lékaři jsou někdy nuceni přistoupit také k perkutánní endoskopické gastrostomii (PEG), kdy vytvoří malý otvor do žaludku, kterým pacientovi následně podávají jídlo, aniž by bylo nuceno procházet skrze jícen.

Radioterapie a chemoterapie

Radioterapii mohou lékaři využít před operací, kdy pomáhá zmenšit nádor prostřednictvím ionizujícího záření. Po operaci se poté používá ke zničení zbylých nádorových buněk. Zvláště u pacientů, kteří nemohou podstoupit operaci, se poté radioterapie používá v kombinaci s chemoterapií, jež se provádí u pokročilých stádií rakoviny jícnu.

Rakovina jícnu: prognóza přežití

V České republice každoročně přibyde asi 500 nových případů rakoviny jícnu. Ačkoliv je toto onemocnění v populaci poměrně vzácné, k jeho diagnostice obvykle dojde příliš pozdě. Z toho důvodu se prognóza přežití následujících pěti let odhaduje pouze na 10 %.

Prevence rakoviny jícnu

Pokud se chcete tomuto onemocnění vyhnout, nejdůležitější součástí prevence by mělo být úplné omezení kouření. Zároveň je nutné přestat s konzumací většího množství alkoholu, příliš kořeněných jídel a příliš horkých nápojů. Lidé, kteří trpí refluxní chorobou jícnu, by měli dbát také na dodržování dietních opatření a chodit na pravidelné kontroly k ošetřujícímu lékaři, aby nedošlo k závažnějším komplikacím.

Zdroje: mou.cz, nemoci.vitalion.cz, linkos.cz

  • Žá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 »