Může melatonin v do­plňcích ublížit? Vyšší dávky by měli předepisovat lékaři

6. 9. 2022

Sdílet

Autor: Depositphotos
Doplňky stravy s melatoninem jsou běžně k sehnání, ačkoli v Česku jsou považovány za nelegální. V některých sousedních zemích tomu tak není. Zjišťovali jsme proto u lékařů, zda skutečně představují riziko pro zdraví zákazníků.

Melatonin je spánkový hormon a z pohledu účinku na lidský organismus jde o velmi zajímavou látku. Ani odborníci se úplně neshodnou na tom, jak vnímat účinky synteticky vyrobeného melatoninu.

Co se dozvíte v článku
  1. Doplněk stravy versus lék
  2. Melatonin: někdy potravina, jindy lék
  3. Prodejci: Melatonin neškodí, ale musí se brát krátkodobě
  4. Nežádoucí účinky melatoninu
  5. Rizika podávání synteticky vyrobeného hormonu
  6. Co musí splňovat doplňky stravy před uvedením na trh
  7. Není melatonin jako melatonin
  8. Jaká pozitiva přináší podávání hormonu

Zda jsou spíše fyziologické, nebo farmakologické. V prvním případě by šlo o účinek, jaký na organismus mají například potraviny, v druhém o účinek léčiv.

Doplněk stravy versus lék

Doplňky stravy

  • Jsou to vlastně potraviny, které se od potravin pro běžnou spotřebu odlišují vysokým obsahem vitaminů, minerálních látek nebo jiných látek s nutričním nebo fyziologickým účinkem. 
  • Byly vyrobeny za účelem doplnění běžné stravy spotřebitele na úroveň příznivě ovlivňující jeho zdravotní stav. 
  • Nejsou tedy určeny k léčbě či předcházení onemocnění. Proto ani nemohou deklarovat vlastnosti prevence, léčby nebo vyléčení onemocnění nebo na tyto vlastnosti odkazovat. 
  • Na rozdíl od léků, které prochází klinickými studiemi, u doplňků stravy není posuzována jejich účinnost. To tedy znamená, že účinky deklarované výrobcem nikdo neověřuje. 

Léčivé přípravky

  • Před uvedením na trh procházejí registračním řízením. V něm se hodnotí jakost, bezpečnost a účinnost léku.
  • Účinnost musí být doložena klinickými studiemi.
  • Bezpečnost léků je pravidelně sledována a vyhodnocována po celou dobu, kdy je lék v oběhu, a to jak ze strany držitele rozhodnutí, tak ze strany SÚKL. 

Zdroj: SÚKL, Vitalia.cz

Melatonin: někdy potravina, jindy lék

Evropská komise v minulosti vydala nařízení (k dohledání je zde), ze kterého vyplývá, že na synteticky vyrobený melatonin se může pohlížet jako na potravinu, respektive doplněk stravy. Rozhodující je koncentrace této látky. Z nařízení vyplývá, že v doplňku stravy by měla činit 0,5 až 1 mg na jednu tzv. kvantifikovanou porci.

Každá evropská země ale k melatoninu přistupuje jinak. Například tuzemský Státní ústav pro kontrolu léčiv (SÚKL) bere melatonin jako farmakologicky účinnou látku, jež patří výhradně mezi léčiva. Doplňky stravy s melatoninem proto považuje za nelegální (viz stanovisko SÚKL z roku 2016) a postupně je jeden po druhém zakazuje.

Z trhu musí pryč další kontroverzní doplňky stravy s melatoninem Přečtěte si také:

Z trhu musí pryč další kontroverzní doplňky stravy s melatoninem

V sousedním Německu či Slovensku se ale takové potravinové doplňky vyrábět i prodávat smějí. „Použití účinné látky melatonin v potravinách (výživových doplňcích) je povolené v rozmezí od 0,5–1 mg na kvantifikovanou porci,“ uvádí na svém webu s podrobným vysvětlením problematiky slovenský Úřad veřejného zdravotnictví, který řídí slovenský hlavní hygienik Ján Mikas. Ve vyjádření také stojí, že pokud je obsah melatoninu vyšší než 1 mg v jedné porci, měl by být preparát zařazen mezi léčiva.

Kvůli odlišnému přístupu v různých zemích jsme zjišťovalizda melatonin v potravinách představuje skutečně zdravotní riziko pro zákazníka. Ten si v ČR doplňky stravy s melatoninem, byť je SÚKL považuje za nelegální, může koupit prakticky kdekoli. Kromě lékáren také u obchodníků s různým jiným zbožím, protože prodej potravin včetně potravinových doplňků je méně regulovaný než prodej léčiv.

Prodejci: Melatonin neškodí, ale musí se brát krátkodobě

Oslovení výrobci a dovozci hovoří podobně jako zástupkyně lékárnické komory: Doplňky stravy s melatoninem mohou krátkodobě pomoci, nejsou ale určeny k tomu, aby je lidé brali delší dobu.

„Melatonin je vysoce účinný hormon, který pomáhá například při narušení spánku vlivem jet lagu (neboli pásmové nemoci, při které dojde k narušení spánkových rytmů při cestách přes více časových pásem) nebo při narušení cirkadiánních rytmů, není však určen k dlouhodobému laickému užívání,“ uvádí mluvčí České lékárnické komory Michaela Bažantová.

„Náš produkt s melatoninem byl od začátku komunikovaný jako vhodný pro lidi s jet lagem, pro práci na směny, srovnání biorytmů atd. Nikoli k dlouhodobému pravidelnému užívání, což jsme posílali i v návodu,“ sděluje na dotazy redakce Jakub Chvosta, jednatel společnosti Brainio, která je dovozcem jednoho z produktů, jehož prodej letos SÚKL zakázal. 

Noční sovy mají svoji diagnózu – nazývá se zpožděná fáze spánku Přečtěte si také:

Noční sovy mají svoji diagnózu – nazývá se zpožděná fáze spánku

Dovozci i výrobci, kteří se rozhodli využít prostor pro vyjádření, odmítají, že by prodejem melatoninových doplňků stravy mohli zákazníkům jakkoli ublížit. „Co je v jednom státu považováno za lék, v jiném je pokládané za výživový doplněk. Proto jsme přesvědčení, že zdraví spotřebitelů nebylo žádným způsobem ohroženo,“ podotýká Ondrej Švantner, manažer společnosti Adelle Davis, slovenského výrobce dalšího letos v Česku zakázaného doplňku stravy.

Nežádoucí účinky melatoninu

Podle stanoviska SÚKL užívání melatoninu bez dozoru lékaře může negativně ovlivnit zdraví pacienta, a to i při podávání nižších dávek. Jak konkrétně, to ústav neříká, ale varuje před kombinací s jinými látkami a před zvýšenou ospalostí. „Při užívání je zároveň nutné zohlednit i možnost interakcí s dalšími léčivými látkami – například estrogen obsažený v hormonální antikoncepci nebo některá antidepresiva mohou způsobit zvýšení hladiny melatoninu v krvi, a zvýšit tak jeho účinek. Dále je důležité neopomenout možnost výskytu zvýšené ospalosti, která může ovlivnit činnosti vyžadující zvýšenou pozornost, jako je řízení dopravního prostředku,“ uvádí SÚKL v šest let starém stanovisku.

Web Vitalia.cz oslovil tři lékaře, kteří se zabývají poruchami spánku, a požádal je o názor, zda melatonin zastoupený v potravinách představuje zdravotní riziko. Odborníci, kteří mají zkušenost s předepisováním melatoninu v lécích, se shodují, že hormon je při řešení potíží pacientů účinný a větší zdravotní problémy při jeho užívání nenastávají. Není ovšem zcela bezrizikovou látkou.

Kdo málo spí, hodně jí a chřadne Přečtěte si také:

Kdo málo spí, hodně jí a chřadne

„Melatonin je obecně považován za bezpečný, nežádoucí účinky jsou minimální a často přechodné – jen zcela ojediněle se setkávám s bolestmi hlavy, závratěmi, agitovaností či únavou, jedna pacientka popisovala kožní reakci. Je ale pravda, že není mnoho údajů o jeho dlouhodobém podávání a podávání ve vyšších dávkách. Z mého pohledu je zejména v dětském věku potřeba pečlivě zvažovat jeho indikace a dávkování,“ uvádí neuroložka Jitka Bušková, vedoucí lékařka Oddělení spánkové medicíny Národního ústavu duševního zdraví.

Pokud je melatonin podán v nesprávnou dobu, může navodit ospalost, vzácně i nevolnost nebo malátnost. „Vzhledem k jeho pozitivnímu efektu na imunitu by se neměl podávat u pacientů s autoimunitními chorobami. Jsou popisovány také interakce s určitými léky,“ doplňuje Soňa Nevšímalová, místopředsedkyně České společnosti pro výzkum spánku a spánkovou medicínu.

Rizika podávání synteticky vyrobeného hormonu

Jak ukazují zkušenosti ze zahraničí, u vyrobeného melatoninu existují rizika, která nemusí být tak patrná. „Otázka volného prodeje melatoninu je kontroverzní. Z mého pohledu ani ne tak vzhledem k jeho účinku, ale jeho nekontrolované koncentraci v některých potravinových doplňcích. Ze zahraniční literatury je známo, že volně prodejné melatoninové přípravky se značně liší ve skutečné koncentraci účinné látky oproti inzerci,“ podotýká Soňa Nevšímalová.

Britští vědci již před lety upozorňovali, že u melatoninových suplementů neexistují žádné standardy čistoty. Tedy, že ve finále nemá zákazník jistotu, kolik melatoninu užívá. Podle profesorky Nevšímalové jedna ze zahraničních studií ukázala, že obsah melatoninu ve žvýkačkách prodávaných dětem se lišil až stonásobně oproti inzerované dávce. Žvýkací pastilky s melatoninem se prodávaly také u nás a na trhu jsou třeba i melatoninové želé bonbóny. Podobná studie jako v zahraničí ale v tuzemsku neexistuje.

Doplňky stravy fungují v režimu potravin, což znamená, že výrobci nemusí prokazovat jejich účinnost ani nesmí slibovat léčení konkrétní diagnózy. Výrobci u nich sice udávají doporučenou denní dávku, prokazovat úřadům skutečné množství účinných složek ale nemusí.

Co musí splňovat doplňky stravy před uvedením na trh

Protože doplňky stravy jsou potravinami, nikoli léky, agendu kolem nich zajišťuje ministerstvo zemědělství, jejich kontrola spadá pod Státní zemědělskou a potravinářskou inspekci.

Pokud chce výrobce na český trh uvést doplněk stravy, musí to oznámit ministerstvu, která provází tzv. notifikaci. „To znamená, že výrobce musí ministerstvu zaslat informace o produktu včetně textů na etiketě a složení. U všech výrobků, které jsou uváděny na trh, se provádí mikrobiální a chemická analýza, popřípadě stanovení aktivních složek,“ popisuje na svém webu výrobce Vitar.

„Provozovatel potravinářského podniku, před prvním uvedením doplňku stravy nebo obohacené potraviny na trh, splní dle zákona (…) o potravinách a tabákových výrobcích (…) oznamovací povinnost tak, že se přes odkaz na webových stránkách ministerstva zemědělství přihlásí do svého účtu, kde vyplní složení a další vlastnosti výrobku a případně vloží i etiketu. Odesláním této informace prostřednictvím Systému pro oznamování potravin bude zákonná povinnost splněna,“ uvádí web ministerstva.

Splnění zákonných povinností znamená mimo jiné, že na etiketě výrobku musí být uvedeno vedle názvu výrobku, kategorie potraviny, hmotnosti i kompletní složení a všechny uvedené údaje musí být pravdivé,“ podotýká k obecným principům Vitar, tradiční český výrobce vitaminových doplňků. Doplňky stravy s melatoninem ovšem v jeho portfoliu nejsou, protože v ČR je jejich výroba zakázána.

Není melatonin jako melatonin

Melatonin lze podle způsobu podání a účinku rozdělit do tří skupin. Zatímco u léků vázaných na předpis se používá tzv. retardovaný melatonin, u doplňků stravy je to tzv. exogenní melatonin.

Retardovaný melatonin znamená, že účinná látka se z předepsaného léku uvolňuje řízeně. Tedy postupně tak, že její účinek vydrží celou noc a odeznívá až druhý den dopoledne. Postupné uvolňování vede k tomu, že hladina melatoninu v krvi je podle lékaře stejná jako při přirozené sekreci hormonu.

„Řízené uvolňování je patentově chráněné a bylo vytvořeno, aby takto podávaný melatonin přesně nahradil případně chybějící sekreci melatoninu ve stáří nebo u některých neurovývojových nebo genetických syndromů v dětství,“ vysvětluje neurolog Karel Šonka, jenž vede Centrum pro poruchy spánku a bdění na Neurologické klinice 1. lékařské fakulty Univerzity Karlovy (LF UK) a Všeobecné fakultní nemocnice (VFN). 

Exogenní melatonin znamená melatonin podávaný, který ovšem nemá řízené uvolňování, takže jeho účinek může mít rychlejší nástup, ale zároveň dochází k jeho rychlejšímu poločasu rozpadu, tedy vyprchávání z organismu.

Třetí typ melatoninu je endogenní, což je ten, který si tělo vytváří samo. Tedy s pomocí buněk nazývaných pinealocyty, které se nacházejí v mozku.

Jaká pozitiva přináší podávání hormonu

Melatonin ale nemá jen kontroverzní stránku. Obě výše citované lékařky se shodují, že synteticky vyrobený hormon, který je podáván účelně a pod dohledem lékařů, dokáže pacientům pomoci. „Na základě svých klinických zkušeností mohu jen potvrdit dobrou účinnost melatoninu v léčbě cirkadiánních poruch (včetně jet lagu), kde se uplatňuje jako významný synchronizátor biologických rytmů. Současně příznivě ovlivňuje některé typy insomnií, ale také se s dobrým efektem podává u některých neurologických a psychiatrických onemocnění,“ popisuje Jitka Bušková.

Kupujete si doplňky stravy s melatoninem?

„Melatonin je využíván v praxi řadu desetiletí. Má výrazné antioxidační účinky, které mohou být využity i v prevenci řady civilizačních nemocí. Jeho hlavní indikací jsou však poruchy spánku – v prvé řadě poruchy cirkadiánního rytmu, jako např. zpožděná fáze usínání a probouzení, která se nejčastěji vyskytuje v adolescenci, nebo poruchy rytmu spánku a bdění u nevidomých,“ podotýká Soňa Nevšímalová.

„Může být použit i u tzv. jet lag syndromu při interkontinentálních cestách nebo u jedinců ve směnném provozu. V rámci nespavosti je účinnější u starších lidí, kdy jeho vylučování fyziologicky klesá. Často bývá užíván rodiči i u dětí s vývojovými poruchami včetně autismu,“ doplňuje Soňa Nevšímalová.

Z vyjádření lékařů také vyplývá, že z medicínského pohledu jde o bezpečnou látku.

„Melatonin má velice krátký poločas rozpadu, proto se velice rychle z organismu vylučuje, a není tak obava z jeho předávkování. Rovněž není návykový, jeho podávání je tedy relativně bezpečné. Sama jsem se s jeho předávkováním nikdy nesetkala a podle zpráv z literatury je u nevidomých podáván řadu desítek let bez jakýchkoliv vážnějších vedlejších účinků,“ podotýká Soňa Nevšímalová.

Exogenní melatonin se obecně považuje za velmi bezpečnou látku (je ostatně tělu přirozený). Fakt, že není vázaný na lékařský předpis a ve spoustě zemí ani na výdej v lékárnách, to jen dokládá po formální stránce,“ uvádí profesor Šonka. „U retardovaného melatoninu, který je vázaný na předpis, jsou bezpečnostní studie půl roku. Neretardovaný melatonin bere hodně lidí mnoho let, někdy až desítky let, a žádné systematické negativní důsledky nejsou v literatuře popsané,“ dodává s tím, že se nedomnívá, že by chronické používání melatoninu představovalo nějaké zdravotní riziko.

Odborná spolupráce:

MUDr. Jitka Bušková, Ph.D.

Vedoucí lékařka Oddělení spánkové medicíny Národního ústavu duševního zdraví. Jako vyučující působí na 1. LF UK a 3. LF UK.


Prof. MUDr. Soňa Nevšímalová, DrSc.

Místopředsedkyně České společnosti pro výzkum spánku a spánkovou medicínu, působí na Neurologické klinice 1. LF UK a VFN


Prof. MUDr. Karel Šonka, DrSc.

Vedoucí lékař Centra pro poruchy spánku a bdění Neurologické kliniky 1. LF UK a VFN. 

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 »