Šestinedělí zvyšuje riziko spuštění roztroušené sklerózy. Mateřství je třeba plánovat

7. 6. 2023

Sdílet

Autor: Depositphotos
Průměrný věk nově diagnostikovaných s roztroušenou sklerózou je necelých 33 let. Téměř tři čtvrtiny pacientů s nemocí tvoří ženy. Stále častěji se proto stává, že neurologové s nimi kromě léčby řeší také to, jak onemocnění skloubit s mateřstvím.

Statistiky potvrzují, že založení rodiny odsouváme do stále vyššího věku a tento trend se promítá také do ordinací neurologů starajících se o pacientky s roztroušenou sklerózou. S ženami musí velmi často probírat téma mateřství. Důvod je jednoduchý: přibývá pacientek, jež se dozví diagnózu dříve, než se rozhodnou založit rodinu.

Co se dozvíte v článku
  1. Budu moci mít dítě?
  2. Proč je lepší těhotenství naplánovat
  3. Neplánované těhotenství je problém
  4. Kojení, spontánní potrat a RS
  5. Šestinedělí jako rizikový faktor

Není divu. Průměrný věk prvorodiček aktuálně činí 30,4 roku. Průměrný věk nově diagnostikovaných pacientů s roztroušenou sklerózou (RS) je 32,6 let a průměrný věk matek s RS v době porodu činil 31,7 roku. Ukazují to alespoň data celostátního pacientského registru ReMuS. Ten také říká, že 71 procent pacientů léčených s RS jsou ženy. Loni porodilo 206 z nich. 

Registr ReMuS funguje v ČR již deset let. Se svolením pacientů s RS do něj lékaři zanášejí data téměř všech léčených v 15 specializovaných centrech. Celkem jsou v registru informace od 20 274, z toho 15 459 z nich užívá biologickou léčbu. V celé ČR trpí tímto onemocněním odhadem 23 tisíc lidí.

Mateřství se v ordinacích neurologů proto stává hojně probíraným tématem. „Jedna pacientka mi nedávno řekla: Nikdy jsem si nemyslela, že budu plánovat těhotenství u vás a ne u gynekologa,“ shrnuje vlastní zkušenost lékař Pavel Hradílek z Centra pro diagnostiku a léčbu demyelinizačních onemocnění Neurologické kliniky Fakultní nemocnice Ostrava a Lékařské fakulty Ostravské univerzity.

Budu moci mít dítě?

Téma mateřství neurologové s ženami řeší bezprostředně po určení diagnózy.„Debatu vedeme hned na začátku, třeba už při jejich prvním vyšetření. Ostatně, není na co čekat. Roztroušená skleróza umožňuje být matkou, vždy je ale lepší těhotenství a kojení plánovat a konzultovat s neurologem,“ dodává Pavel Hradílek s tím, že mnohé pacientky berou nemoc vážně a mají k mateřství řadu otázek. Cílem lékařů je doporučeními jim pomoci v rozhodování, zda rodinu založit, či nikoliv.

Ženy s RS si tuto otázku kladnou a je to logické. Lékaři by v ní v dnešní době ale již měli mít jasno – pokud žena dítě chce, není RS, až na výjimky, překážkou.Dnes již to není o tom, zda těhotenství ano, či ne, ale otázkou je, kdy, podotýká neurolog z FN Ostrava. Zkušenost z praxe totiž ukazuje, že pokud se těhotenství naplánuje, většina pacientek s RS spontánně otěhotní, spontánně vaginálně porodí (sama RS není indikací k porodu tzv. císařským řezem) a kojí. „Aniž by to na průběhu RS zanechalo vážnější následky,“ dodává Pavel Hradílek.

Nicméně medicína není vždy jednoznačná, a tak jsou některé ženy s RS v těhotenství, při porodu a v šestinedělí ve zvýšeném riziku, že se jejich onemocnění zhorší. Jde většinou o pacientky, které ještě před početím měly horší průběh onemocnění. Rizikovými faktory je ale i užívání některých léčiv, šestinedělí či únava, která se na začátku mateřství násobí. „Pokud žena otěhotněla plánovaně v době, kdy onemocnění bylo stabilní, riziko, že se něco stane, není nulové, ale je malé,“ míní lékař a podotýká, že rizika jsou spojena i s těhotenstvím žen, které nemají RS. 

Část pacientů s roztroušenou sklerózou se k moderní léčbě dostane dřív Přečtěte si také:

Část pacientů s roztroušenou sklerózou se k moderní léčbě dostane dřív

Proč je lepší těhotenství naplánovat

Proč je mateřství s RS lepší plánovat, je nasnadě. U ženy, jež chce mít v dohledné době dítě, k tomuto lékaři přihlížejí např. při volbě léčiv. Možnosti léčby se u RS mění a dnes již jsou k dispozici i léky, při jejichž užívání ženy mohou kojit nebo jejichž užívání nemusí přerušovat kvůli těhotenství. „Když nám žena o svých plánech řekne, většinou jsme schopni zařídit léčbu tak, aby ji nemusela v těhotenství přerušovat. Pro ni může být taková situace komfortní,“ podotýká lékař. Ve výjimečných případech se ale nasazení takové léčby nemusí podařit. Zejména pokud má pacientka těžký průběh onemocnění.

Kojení či otěhotnění paradoxně nebrání ty nejnovější léky, ale preparáty, jež medicína zná už třeba 30 let. Je to dáno tím, že až po takové době bylo prokázáno, že nemají vliv na plod či kojence. Tuto vlastnost mají pravděpodobně i nová léčiva, jenže výrobce z etických důvodů neprovádí ověřování účinnosti před uvedením léku na trh na těhotných ženách. Podle Pavla Hradílka ale už dnes je jasné, že bezpečné jsou např. některé monoklonální protilátky, nicméně výrobce to zatím nepromítl do souhrnných údajů o léčivu, takže nejde o doporučený postup užívání.

Chcete se o mateřství s diagnózou roztroušené sklerózy dozvědět více?

Ve středu 7. června máte možnost zúčastnit se online konference s názvem Místo pro kvalitní život s roztroušenou sklerózou pořádanou pacientským sdružením Unie Roska. Jedna z přednášek bude věnována právě i tématu kojení, těhotenství, porodu či šestinedělí u žen s RS. 

Více o programu konference i o nutnosti se na ni registrovat najdete v pozvánce zveřejněné na Vitalia.cz.

Při přání pacientky založit rodinu lékaři přihlížejí také k tomu, v jaké fázi onemocnění RS žena je, jak dlouho se léčí, jaký lék užívá nebo jak dlouho ještě bude plodná. Z posuzování těchto faktorů pak vzejde doporučení. Posečkat radí např. ženám, které v předchozích 12 měsících prodělaly ataky nemoci nebo vyšetření magnetickou rezonancí ukazuje výraznější zánětlivá ložiska. „I při podávání vysoce efektivních léků může docházet k atakám. A pokud je nemoc vysoce aktivní a pacientka má tyto ataky i dvě nebo tři za rok, pak jim doporučujeme s těhotenstvím počkat,“ podotýká Pavel Hradílek. Je pak na pacientce, zda doporučení bude respektovat.

Vždy pak neurologové chtějí vědět, když pacientka s RS otěhotní, protože poté u některých léků zvažují úpravu intervalů při jejich podávání.

Neplánované těhotenství je problém

Pokud žena s RS otěhotní neplánovaně, bezprostředně poté se řeší, jaké léky pacientka užívá. „Pokud to jsou ty, které se slučují s těhotenstvím, tak to problém být nemusí a je léčena dál. Je-li to lék, o kterém víme, že by se v těhotenství podávat neměl, je třeba jeho užívání ihned přerušit a rozhodnout se, co bude dál. Zda bude pacientka bez léčby, či bude brát jiný lék s těhotenstvím slučitelný,“ popisuje Pavel Hradílek. Pokud žena po určitou dobu užívá léky, které se s těhotenstvím vylučují, měla by to říci svému gynekologovi, který by ji měl adekvátně sledovat a případně odeslat i na genetické testy.

Komplikovaná je také situace pacientek, jež chtějí kvůli neplánovanému těhotenství podstoupit interrupci. Ta je poměrně velkým zásahem do organismu a lékaři v tuto chvíli nemají záruky, že tento zásah neovlivní průběh RS.

Proto by žena, která rodinu neplánuje, i její partner měli používat antikoncepci. Lze zvolit i tu hormonální. „Pacientky mohou používat jakoukoliv formu antikoncepce, protože z hlediska léčby RS není problém ani s tou hormonální. Naopak, je mnohem horší, když žena otěhotní neplánovaně,“ podotýká neurolog.

Kojení, spontánní potrat a RS

Aby mohli lékaři ženám zodpovědně radit, provedli v roce 2022 analýzu pacientských dat z ReMuS. Celkem pracovali s údaji o 1681 pacientkách, které s diagnózou RS otěhotněly a přivedly na svět děti. Srovnávali například, jak se nemoc chová u žen, jež vysadily léčbu, ve srovnání s těmi, které ji užívaly i v době těhotenství a kojení. Nebo jaký mělo onemocnění průběh u těch, které kojily tři a více měsíců, ve srovnání s těmi, které nekojily a hned po porodu zahájily terapii.

Z dat vyplývá, že u pacientek s RS není vyšší riziko potratů. S RS také lze většinou kojit, aniž by to ovlivnilo průběh nemoci. „Ženy s RS se nemusí kojení obávat, pokud je jejich nemoc stabilizovaná. Kojení nemá negativní vliv na průběh onemocnění RS,“ říká Pavel Hradílek. 

Analýza zároveň doložila několik rizikových situací. Jednou z nich je, pokud žena přeruší kvůli plánu otěhotnět léčbu účinnými látkaminatalizumab nebofingolimod. U pacientek v ReMuS po přerušení léčby došlo ke zhoršení průběhu nemoci. „Proto je třeba ženy, které užívají tato léčiva, předem upozornit, že jejich vysazení je pro ně rizikové a může vést k atace onemocnění, jejímu zhoršení, což může znamenat odsunutí původních plánů založit rodinu,“ říká neurolog Hradílek.

Tento poznatek ale nic nemění na tom, že ženy s roztroušenou sklerózou mohou být matkami. „Těhotenství pacientek s RS považujeme všeobecně za bezpečné,“ shrnuje závěry analýzy Pavel Hradílek. Na otázky Vitalia.cz pak sdělil, že si nevybavuje žádný případ z české medicínské praxe, kdy by ataka přišla přímo při porodu nebo bezprostředně po něm.

Neuroložka: Moderní léčba roztroušené sklerózy umožňuje dříve nemyslitelné Přečtěte si také:

Neuroložka: Moderní léčba roztroušené sklerózy umožňuje dříve nemyslitelné

Šestinedělí jako rizikový faktor

Situace v následném šestinedělí je ale o něco složitější. Toto období, kdy v organismu ženy následkem porodu dochází ke značným hormonálním změnám, je u žen s roztroušenou sklerózou považováno za jeden z rizikových faktorů.

„Některé z hormonů mají vliv na to, že v organismu může převládnout prozánětlivé působení na centrální nervový systém. V organismu se proto zvětší zánětlivý proces, a to může vést až k atace nemoci. Pravidlem to ovšem není. Více jsou v šestinedělí ohroženy ženy, které měly ataky v těhotenství nebo před ním,“ upozorňuje Pavel Hradílek. Pokud ataka nastane, ženy by měly vyhledat svého neurologa. Rozhodně se nevyplatí vyčkávat, byť jde o situaci, kdy se žena plně soustředí na novorozence a sžívá se s novou životní situací.

Lékaři i pacienti se také domnívají, že změny v šestinedělí se mohou podílet na spuštění RS. Například Libuši Strapzcykové (33) z Kralup na Vltavou onemocnění diagnostikovali na konci roku 2021. Libuše je ale přesvědčena, že se nemoc projevovala již více než dva roky před diagnózou a že první výrazné potíže přišly právě v šestinedělí. 

„U řady žen byl spouštěčem onemocnění porod a šestinedělí. To se dnes již ví. Je to věcí hormonálních změn, ale i mechanismu toho porodu, který lze vnímat jako zánětlivý proces. V určité fázi těhotenství organismus přestane plod tolerovat a to vede k tomu, že se v něm začnou shromažďovat protilátky a různé působky imunitního zánětu, které vedou k tomu, že tělo plod vyloučí. Tedy že nastane porod,popisuje proces, který může nemoc vyvolat, Pavel Hradílek.

Pro ženy s roztroušenou sklerózou, jež mají krátce před porodem či po něm, je rizikem také únava„Ta pramení nejen z vysokého stupně těhotenství, následně porodu, ale také z nemoci jako takové. A pokud do toho přijde to, že žena ještě musí v noci vstávat k dítěti, je to pro pacientky velmi náročné,“ přitakává Pavel Hradílek. Aby se únava nepropsala v ataku, musí mít žena kolem sebe fungující zázemí a chápavé okolí, které jí umožní, jak jen to jde, šetřit síly a odpočívat.

Odborná spolupráce:

MUDr. Pavel Hradílek,Ph.D.

Neurolog, lékař Centra pro diagnostiku a léčbu demyelinizačních onemocnění na Neurologické klinice FN Ostrava. 

Autor článku

Redaktorka Vitalia.cz. Vystudovala žurnalistiku a češtinu na Univerzitě Palackého v Olomouci, pracovala v Deníku, na webu TV Nova a iDNES.cz. Píše o zdravotnictví. Je držitelkou novinářských cen Psychiatrické společností ČLS JEP za rok 2021 a 2022. 

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