Nová léčba pro ženy s agresivním nádorem prsu. Pojišťovny od dubna zaplatí imunoterapii

8. 3. 2023

Sdílet

Autor: Isifa.cz
Ženy, u kterých se vyskytne vysoce agresivní druh rakoviny prsu, tzv. triple negativní, budou mít nově možnost podstoupit imunoterapii. Studie prokázaly její účinnost u tohoto typu nádoru a Evropská agentura pro léčivé přípravky (EMA) ji schválila. Podle Aliance žen s rakovinou prsu by měly pojišťovny začít hradit tuto léčbu českým pacientkám už od dubna.

Diagnózu rakoviny prsu si v Česku každý rok vyslechne téměř 7500 žen. Asi 15 procent z nich má tzv. triple negativní karcinom, který je vysoce agresivní, rychle roste a metastázuje.

„Triple negativní karcinom prsu postihuje často mladší ženy, v produktivním věku. Tento typ nádoru roste velmi rychle – zvětšuje se v řádu týdnů. Často se objevuje jako intervalový, protože může vzniknout a rychle vyrůst mezi pravidelnými preventivními prohlídkami. Není také nezvyklé, že ženy onemocní v těhotenství nebo v době kojení, kdy se prsa vlivem různých hormonálních změn mění, a nádor se v nich tak snadno ‚ztratí‘,“ vysvětluje onkoložka Katarína Petráková, primářka Kliniky komplexní onkologické péče Masarykova onkologického ústavu.

Má jen jednu ledvinu a ta začala kolabovat. Zachránil ho lék pro diabetiky Přečtěte si také:

Má jen jednu ledvinu a ta začala kolabovat. Zachránil ho lék pro diabetiky

Pacientky s tímto typem nádoru jsou navíc mladší než ty s jiným typem karcinomu prsu, a to průměrně až od deset let. Až pětina z nich je mladší čtyřiceti let. „S tím, že by v takto mladém věku mohly onemocnět rakovinou, vůbec nepočítají. Nádor je agresivní, u 45 procent žen metastázuje do tří let,“ říká specialistka.

Imunoterapie snižuje i riziko návratu nemoci

Dosud se ženy léčily chemoterapiemi, případně, pokud se nádor podaří zachytit v časném stadiu, i operativně a radioterapií. Imunoterapie jakožto nově schválená léčba tohoto typu nádoru otvírá další možnost účinné pomoci. Je už standardem léčby u jiných typů nádorů a je podle odborníků velmi úspěšná. „Nejúčinnější je u melanomu nebo u pacientů s nádory střeva,“ uvádí onkoložka.

Tetují ženám po rakovině prsu nové bradavky, vrací jim tím sebevědomí Přečtěte si také:

Tetují ženám po rakovině prsu nové bradavky, vrací jim tím sebevědomí

Imunoterapie ovšem nemusí znamenat, že se pacientky chemoterapiím zcela vyhnou. „U některých nádorů se používá imunoterapie sama (např. u již zmíněných nádorů), u některých je to v kombinaci s chemoterapií, jako např. u nádoru plic a nádoru prsu. Kombinace chemoterapie a imunoterapie pacientkám s časným triple negativním karcinomem prsu nabízí větší pravděpodobnost vyléčení,“ upřesňuje pro Vitalii.cz primářka Petráková.

„Imunoterapie nabízí našim pacientkám výrazně účinnější léčbu, která je spojena s vyšším procentem dosažených kompletních remisí, tedy úplného vymizení nádoru. Současně se významně snižuje riziko návratu nemoci ve formě metastáz,“ doplňuje doktorka Petráková a zdůrazňuje, že je třeba, aby se pacientky léčily v komplexních onkologických centrech (KOC), kde je k dispozici nejmodernější terapie.

Léčba bude probíhat ve velkých centrech

Právě v těchto centrech bude také léčba imunoterapií dostupná. „Veškerá nová léčba, tedy i imunoterapie, je dostupná v KOC, protože případné nežádoucí účinky může ihned řešit tým odborníků, který je právě v KOC koncentrován,“ uvedla pro server Vitalia.cz Štěpánka Pokorná, ředitelka pacientské organizace Aliance žen s rakovinou prsu.

Podle Aliance se však až třetina žen do KOC vůbec nemusí dostat. Jejich šance na moderní terapii je tak mizivá. „Pojišťovny úhradu léčby schválily, dostanou se k ní však jen pacientky v těchto specializovaných centrech, proto je kromě rychlosti diagnózy důležité i místo, kde se o ně starají,“ vysvětluje Štěpánka Pokorná.

Kde se nacházejí komplexní onkologická centra

Hlavní město Praha

  • Všeobecná fakultní nemocnice v Praze
  • Thomayerova nemocnice
  • Fakultní nemocnice v Motole
  • Nemocnice Na Bulovce
  • Fakultní nemocnice Královské Vinohrady

Jihočeský kraj

  • Nemocnice České Budějovice, a.s.

Plzeňský kraj

  • Fakultní nemocnice Plzeň

Ústecký kraj

  • Krajská zdravotní, a.s. – Masarykovy nemocnice v Ústí nad Labem, o.z.

Liberecký kraj

  • Krajská nemocnice Liberec, a.s.

Královéhradecký kraj

  • Fakultní nemocnice Hradec Králové

Pardubický kraj

  • Multiscan, s. r. o. Pardubice

Kraj Vysočina

  • Nemocnice Jihlava, p.o.

Jihomoravský kraj

  • Masarykův onkologický ústav v Brně
  • Fakultní nemocnice Brno
  • Fakultní nemocnice U Svaté Anny Brno

Olomoucký kraj

  • Fakultní nemocnice Olomouc

Moravskoslezský kraj

  • Fakultní nemocnice s poliklinikou Ostrava
  • Nemocnice Nový Jičín, Radioterapie, a.s.

Zlínský kraj

  • Krajská nemocnice T. Bati, a.s.

Zdroj: VZP

Nová léčba dává naději, pacientky často obviňují samy sebe

Triple negativní nádor vzniká často u mladých žen s mutacemi genu BRCA1 a BRCA2. Zpozornět by také měly ty, u nichž se v rodině vyskytlo více nádorových onemocnění v mladším věku. „Tyto ženy by si měly zjistit, jaké riziko nádoru jim hrozí, pravidelně se samovyšetřovat a chodit častěji na preventivní prohlídky. Žít v neustálém strachu ale nijak nepomáhá. Je sice třeba svůj zdravotní stav hlídat, ale nepodléhat panice a silnému stresu, který zdraví rozhodně neprospívá,“ doplňuje Štěpánka Pokorná.

Nová léčba tak bude pro pacientky s triple negativním typem nádoru dle Štěpánky Pokorné znamenat naději. Často se totiž u pacientek setkává s tím, že hledají vinu z nemoci u sebe, i když například nekouří, sportují a žijí zdravě, a vnitřně tím trpí.

Hana si nádor nahmatala sama

Jednou z pacientek, která triple negativním karcinomem onemocněla, je i 35letá Hana z Prahy. „Ležela jsem večer v posteli, položila jsem si ruce na hrudník a najednou jsem ucítila, že mám v prsu něco tvrdého. A hned v ten okamžik jsem věděla, co to je. Nevím jak, ale prostě mi bylo jasné, že to bude nádor,“ vzpomíná Hana, která do té doby žádné příznaky nemoci nepociťovala, „Až zpětně jsem si uvědomila, že poslední tři měsíce jsem byla hodně unavená, občas jsem takzvaně odpadala už v šest hodin večer, což u mě nebývá zvykem,“ popisuje.

Test ukáže, zda žena s rakovinou prsu potřebuje chemoterapii Přečtěte si také:

Test ukáže, zda žena s rakovinou prsu potřebuje chemoterapii

Vyšetření, která následně podstoupila, její domněnky potvrdila. Lékaři ji začali léčit chemoterapiemi. Celkem ji čekalo 12 cyklů – čtyři s jedním lékem a osm s dalším. „Bylo to náročné období. Sice jsem z chemoterapie nezvracela, ale fyzicky jsem byla úplně vyčerpaná, měla jsem velké bolesti hlavy, všech kloubů, vypadaly mi vlasy a postupně se u mě začaly objevovat i další nežádoucí účinky v podobě brnění rukou a nohou. Důležité ale bylo, že nádor se rychle zmenšoval,“ vysvětluje Hana a doplňuje: „Po druhém cyklu prvního léku už nebyl nádor na pohled vidět, po třetím jsem jej necítila ani pohmatem, při čtvrtém už byl vidět jen nepatrně na ultrazvuku.“ 

Chemoterapii museli lékaři ukončit předčasně

Po ukončení chemoterapie prvním lékem přešla Hana na druhý. Bohužel při této léčbě přišly výraznější nežádoucí účinky, například silnější brnění končetin, ale i obličeje, špatná citlivost prstů a zhoršily se bolesti kloubů. Zároveň se opět začal zvětšovat nádor. Lékaři proto rozhodli o předčasném ukončení druhé fáze léčby a doporučili operaci, kterou podstoupila v listopadu minulého roku. Při ní jí lékaři odstranili obě celá prsa, protože je nositelkou genu BRCA1 a pravděpodobnost, že by se nádor vrátil, je v takovém případně příliš velká.

Nyní Hana zahájila ještě preventivní biologickou léčbu snižující pravděpodobnost návratu nádoru, kterou bude užívat přibližně rok. „Nikdy by mě nenapadlo, že rakovinou onemocněním v takto mladém věku, proto všem ženám doporučuji, aby samovyšetření prsu nepodceňovaly, a jakmile se jim nebude něco zdát, vyrazily k lékaři,“ uzavírá mladá žena.

Autor článku

Redaktorka serveru Vitalia.cz. Zaměřuje se především na zdravý životní styl, pohyb a zdraví dětí. Mimo novinařinu pracuje také jako lektorka pohybových kurzů pro děti a rodiče.

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