Rakovina prsu

Karcinom prsu je zhoubné nádorové onemocnění, které postihuje v naprosté většině případů ženy. Vysokou incidenci mají všechny vyspělé země. Pokud je ovšem rakovina odhalena včas, dá se poměrně dobře léčit. Ženy by proto měly chodit na pravidelné lékařské prohlídky a také si provádět samovyšetření prsou.

Co je rakovina prsu?

Karcinom prsu je maligní nádorové onemocnění prsu, které v 99 % případů postihuje ženy. Zhoubný nádor se vyvíjí z buněk, které ztratily svou fyziologickou funkci a změnily se v maligní nádorové buňky. Nádor prsu se může snadno rozšířit do okolí. V jeho blízkosti se totiž nachází mízní uzliny, které mohou nádorové buňky infiltrovat a metastázovat tak do dalších tkání a orgánů.

Karcinom prsu je vůbec tím nejčastěji diagnostikovaným nádorovým onemocněním u žen v České republice (i v ostatních vyspělých státech světa). Každý rok čeští lékaři odhalí toto onemocnění u přibližně 6 tisíců žen. Jeho incidence stále stoupá, ale mortalita se díky zlepšené prevenci a efektivnějším metodám léčby drží na stejné úrovni.

Typy zhoubných nádorů prsu

Klasifikace nádorů prsu je poměrně složitá a zohledňuje mnoho faktorů. Samotnému malignímu nádoru obvykle předchází jeho neinvazivní formy. Jedná se o drobné lokálně ohraničené nádory označované jako karcinomy in situ.

Z nich mohou vznikat maligní nádory označované jako invazivní nádory, které mají schopnost prorůstat tkáněmi a metastázovat do jiných částí těla:

  • duktální karcinom prsu – nejčastější typ, postihuje vývody mléčných žláz, jeho vzácnou formou je Pagetův karcinom bradavky,
  • lobulární karcinom prsu – druhý nejčastější typ, postihuje oblast horního zevního kvadrantu,
  • inflamatorní (erysipeloidní) karcinom – nejagresivnější typ nádoru, který infiltruje celý prs, ale je poměrně vzácný.

Některé útvary mohou být i nezhoubné. Jsou tvořeny buď nahromaděnou pojivovou tkání, nebo se jedná o cysty.

Proč vzniká rakovina prsu?

Přesný mechanismus toho, proč u žen vzniká rakovina prsou, není znám. Podobně je tomu většinou i u jiných druhů rakoviny. Podstatné ale je, že jsou známy alespoň rizikové faktory, které pravděpodobnost vzniku nádorů významně zvyšují.

Nejvýznamnějším rizikovým faktorem je bezpochyby věk. Incidence nádorů prsu vzrůstá spolu s věkem, proto se u mladých dívek a žen objevují jen ojediněle. Jejich výskyt začíná stoupat u žen starších 30 let. Za nejohroženější věkovou skupinu jsou považovány ženy starší 45 let.

Dalším významným rizikovým faktorem karcinomu prsu jsou genetické predispozice. V tomto případě jsou známy dva geny, konkrétně BRCA1 a BRCA2, jejichž mutace zvyšují riziko vzniku nádorového bujení. Zvýšené riziko pak existuje také u žen, jejichž matky, sestry nebo dcery onemocněly rakovinou prsu.

Další rizikové faktory rakoviny prsu:

  • hormonální vlivy – nízký věk první menstruace (kolem 12 let), pozdní nástup menopauzy (nad 55 let), užívání hormonální substituce, hormonální stimulace v rámci umělého oplodnění,
  • zátěž zářením – například expozice ionizujícímu záření v rámci léčby lymfomu,
  • nadměrná konzumace alkoholu,
  • nezdravý životní styl,
  • nedostatek pohybu a obezita.

Moderní výzkumy ukazují, že strava při rakovině prsu hraje dost důležitou roli. Ženy, které konzumují velké množství cukrů a tuků, do těla dostávají hodně cholesterolu. Ten představuje výchozí látku pro syntézu estrogenů, což jsou hormony přispívající ke vzniku rakoviny prsu. V tukové tkáni se mohou estrogeny spolu s toxickými látkami kumulovat a působit nezdravě na prsní žlázu.

Příznaky rakoviny prsu

Mnoho žen si myslí, že rakovina prsu bolí. Pro počáteční stádia nemoci to ovšem neplatí. Mnohdy musí rakovina dojít až do pokročilého stádia, aby se vůbec nějaké příznaky objevily. Jak poznat rakovinu prsu? Každá žena by si měla na svých prsech všímat následujících změn:

  • uzlík, bulka nebo zatvrdlina uvnitř prsu,
  • viditelná změna tvaru nebo velikosti prsu,
  • vtažení (zploštění) bradavky,
  • krvavý výtok z bradavky nebo mokvání,
  • vtažení kůže prsu a vznik důlků,
  • pomerančová kůže,
  • bolestivost bradavky nebo celého prsu,
  • hematom nebo zarudnutí kůže prsu,
  • otok prsu,
  • změny v podpažní jamce.

Rakovina prsu: léčba

Moderní možnosti léčby rakoviny prsu jsou dnes velmi vyspělé. Pokud je karcinom diagnostikován v raném stádiu, šance na úplné vyléčení je dost vysoká. To, jaký léčebný postup lékaři zvolí, závisí na stupni onemocnění, věku pacientky a přítomnosti metastáz. Nejčastěji se kombinuje chirurgická léčba s biologickou léčbou nebo chemoterapií.

Operace rakoviny prsu

K chirurgickým výkonům se nejčastěji přistupuje u časně diagnostikovaných nádorů, které jsou jasně ohraničené, nebyl u nich prokázán vznik metastáz, a šance na odstranění celé rakovinotvorné tkáně je tudíž vysoká. Jedná se o velmi radikální řešení, proto se lékaři při volbě vhodného typu operace řídí velikostí a lokalizací nádoru:

  • exstirpace – vyjmutí nádorového ložiska s lemem okolní zdravé tkáně,
  • segmentální resekce – odstranění té části prsu, kde se nachází nádorové ložisko,
  • mastektomie – odstranění celého prsu.

Po odstranění nádoru se někdy přistupuje i k odstranění lymfatických uzlin v oblasti podpaží, i když zde ještě nebyla prokázána přítomnost nádorových buněk. Aby ale lékaři nemuseli uzliny hned odstraňovat, lze během operace provést scintigrafické vyšetření sentinelové uzliny, což je první uzlina, do které nádor metastázuje. Pokud bude vyšetření negativní, není nutné uzliny odstraňovat.

Chemoterapie a biologická léčba rakoviny prsu

Po chirurgickém výkonu se obvykle přistupuje k chemoterapii. Ta je doporučována hlavně pacientkám, u kterých byly nádorovými buňkami postiženy lymfatické uzliny. Cytostatika zklikvidují případné buňky, které stihly uniknout z lymfy do krve, aby byla rakovina odstraněna úplně. Chemoterapii by ovšem měly podstoupit také ženy, u kterých sice nedošlo k postižení uzlin, ale mají zvýšené riziko nádorového rozsevu.

Protože má chemoterapie negativní vliv i na zdravé buňky, dostává se dnes do popředí biologická léčba. Preparáty podávané při tomto typu léčby působí na rozdíl od cytostatik cíleně pouze na nádorové buňky. Díky tomu mají minimum vedlejších účinků. Biologická léčba je sice vysoce nákladná, nicméně pokud pacientka trpí nádorem, u kterého je prokázána účinnost této léčby, bude plně hrazena zdravotní pojišťovnou.

Hormonální léčba rakoviny prsu

Hormonální léčba dává smysl v případech, kdy jsou v nádoru přítomny hormonální receptory. To totiž značí, že vznik a růst nádoru závisí na hormonálních podnětech organismu. Tento druh léčby se většinou nasazuje po chemoterapii v případě těžkých a rozsáhlých nádorů. Hormonální léčba trvá několik let. Aby byla skutečně efektivní, musí probíhat po celou dobu bez přerušení.

Fotonová a protonová léčba rakoviny prsu (radioterapie)

Protonová radioterapie je moderním léčebným doplňkem, který bývá aplikován po chirurgickém odstranění nádorové tkáně. Ozařování vede přímo k zániku nádorových buněk, případně k zamezení jejich buněčného dělení. Používá se tedy jako doplněk jiných léčebných metod, sama o sobě většinou není dostatečně účinná, aby vedla ke kompletnímu vyléčení pacientky.

Oproti klasické fotonové radioterapii je protonová radioterapie mnohem šetrnější, neboť umožňuje zamířit protonový paprsek přesně do postižené oblasti. Tím se snižuje míra ozáření okolních orgánů a minimalizuje se tím riziko nežádoucích účinků na srdce a plíce.

Prevence rakoviny prsu

U rakoviny prsu hraje nesmírně důležitou roli prevence. Proto mají všechny ženy starší 45 let nárok na hrazené mamografické vyšetření prsou ve dvouletých intervalech. Vyšetření není nijak bolestivé, jde v podstatě o rentgen, a proto by ho ženy neměly odkládat. U mladších žen se doporučuje provádět při podezření na rakovinu prsu nejprve ultrazvuk. Pokud by totiž šlo o těhotnou ženu, mohl by jí mamograf uškodit.

Nápomocnou metodou pro odhalení nádoru, kterou může každá žena provádět sama, je samovyšetření prsou. Samovyšetření by se mělo provádět alespoň jednou měsíčně. Žena by si měla prsa vyšetřit pohmatem, prozkoumat podpaží a sledovat pohledem stav bradavek. Samovyšetřením pohmatem lze ovšem odhalit útvary větší než 20 mm, tudíž nelze tímto způsobem nahradit odborné vyšetření na mamografu nebo ultrazvuku.

Rakovina prsu u mužů

Rakovina prsou je vnímána jako typicky ženské onemocnění, neboť v 99 % případů postihuje ženy. To ovšem neznamená, že se nemůže u muže objevit. Nejohroženější skupinu představují muži ve věkovém rozmezí 60–70 let. Objevuje se přitom častěji u pacientů, kteří podstoupili radioterapii hrudníku v rámci léčby jiného nádorového onemocnění, trpí cirhózou jater, mají vysokou hladinu estrogenu v krvi nebo se rakovina prsu vyskytuje v jejich rodině.

Rakovina prsu u dětí

Maligní nádory prsu jsou u dětí naprosto raritní, častější jsou nezhoubné útvary. Když už se objeví, tak většinou u dospívajících dívek nad 12 let. Díky malému objemu prsní tkáně lze navíc bulku objevit ještě v raném stádiu, takže je šance na vyléčení při okamžitém nasazení léčby vysoká.

Zdroje: nzip.cz, mamo.cz, ptc.cz, ncbi.nlm.nih.gov, breast-cancer-research.biomedcentral.com, nature.com

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